2015-12-13 4 views
-3

Я новичок в java, так извините за несоответствия.Метод вызова из экземпляра класса

Я создаю библиотечную программу, и мне сложно вызвать метод из класса Book в классе Patron.

В классе Patron у меня есть метод checkOutBook(), который пользователь может ввести в книгу для проверки. Однако у меня возникли проблемы с доступом к методу setStatus() в книге. Я знаю, что я должен назвать это против экземпляра класса Book, но я не уверен, как это сделать с введенной пользователем строкой.

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Scanner; 

public class Book implements BookInterface { 

    Scanner input = new Scanner(System.in); 
    static ArrayList <String> UserList = new ArrayList <String>(); 
    static ArrayList <String> BookList = new ArrayList <String>(); 

    public String title; 
    public String author; 
    public Book book; 
    private String status; 
    private String borrower; 

    public Book(String t, String a) { 
    title = t; 
    author = a; 
    } 

    //constructor create new book 
    public Book(String newTitle) { 
    title = newTitle; 
    } 


    public String toString() { 
    return title + " " + author; 
    } 

    public String getTitle() { 
    return title; 
    } 

    public void setTitle(String title) { 
    this.title = title; 
    } 

    public String getAuthor() { 
    return author; 
    } 

    public void setAuthor(String author) { 
    this.author = author; 
    } 

    public String getStatus(String book) { 
    return status; 
    } 

    public void setStatus(String status) { 
    this.status = status; 
    } 

    public void setBorrower(String borrower) { 
    this.borrower = borrower; 
    } 

    public String getBorrower(String checkPatron) { 
    return borrower; 
    } 

    public String getBook(String checkPatron) { 
    return book; 
    } 

    public void setBook(Book bookCheckOut) { 
    this.book = bookCheckOut; 
    } 


} 
public void CheckOutBook() { 
    Scanner inputread = new Scanner(System.in); 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter full patron name: "); 
    String borrower = inputread.nextLine(); 
    System.out.println("Enter book title to check out: "); 
    String bookCheckOut = inputread.nextLine(); 

    if (Book.BookList.contains(bookCheckOut)) { 
     Book.BookList.remove(bookCheckOut); 
     Book.setStatus("OUT");  //error message   
     Book.setBorrower(borrower); //error message 
     System.out.println("----------" + bookCheckOut + " has been checked out!----------"); 
     System.out.println("-------------------BOOK STATUS:---------------------"); 
     System.out.println("Book Title: " + bookCheckOut); 
     System.out.println("Book Status: Checked out"); 
     System.out.println("Borrower: " + borrower); 
     System.out.println("Due Date: " + dueDate); 
     System.out.println("----------------------------------------------------"); 

Я пытался это сделать, но это не сработало :( Спасибо за вашу помощь

Book bookCheckOut = new Book(bookCheckOut); //error: constructor Book(book) undefined 
bookCheckOut.setStatus("OUT"); 
bookCheckOut.setBorrower(borrower); 
bookCheckOut.setBook(bookCheckOut); 
+0

Java = JavaScript, таким образом фрагменты кода в этом случае недействительны – ThisClark

+1

Книга bookCheckOut = новая книга (bookCheckOut); <- что это? попробуйте это -> «Book bookCheckOut = новая книга (« bookname »); или «Book BookCheckOut = новая книга» («title», «author»); «Помните, что использование одного и того же имени переменной для разных типов переменных является опасным. –

+0

Что вы пытаетесь сделать? посмотрите, и каков результат, который вы в настоящее время получаете? Это помогло бы, если бы вы отправили свою полную программу. –

ответ

0

Книга bookCheckOut = новая книга (bookCheckOut)! < ~ I что вы запутались, потому что вы уже определили bookCheckOut как строку со сканера и в этой строке вы привязываете его к объекту книги. Попробуйте изменить первую книгу CheckOut в этой строке на что-то еще. Синтаксис: Book bookObjectName = new Book (" String ");

Для ошибки setStatus и setBorrower вы пытаетесь использовать эти методы, как если бы они были статическими. Чтобы исправить это, не вызывайте Book.setStatus, а замените Book своим именем экземпляра объекта книги. Пример: книга b = новая книга («Asd», «abc»); b.setStatus ("XYZ");

Кроме того, почему у вас есть два сканера?

+0

P.S. Это очень похоже на вопрос о том, как получить практическое испытание AP Computer Science A AP. Кроме того, я в настоящее время набираю это на своем телефоне, чтобы опубликовать исправленную версию вашего кода. Если бы мой ответ был недостаточным, и лучший ответ не был опубликован завтра, я добавлю исправленную версию вашего кода к моему ответу. Ура! –

+0

Привет! Спасибо!!Сначала я пытался это сделать, но меня отбросили, потому что программа предложила пользователю ввести любой заголовок книги, который они хотят проверить, и я не знал, как создать экземпляр класса книги с введенной пользователем строкой. Например, если «bookTitle» использовался как переменная String, которую вводит пользователь, это будет что-то вроде «Book BookCheckOut = новая книга (bookTitle)»? или «Book BookCheckOut = новая книга (« bookTitle »)»? – kayylai

+0

Если у вас есть строка, которая уже содержит заголовок (например: String bookTitle = «Отличное название книги»;), то вы бы использовали Book BookCheckOut = новую книгу (bookTitle); Это создало бы Book Object 'bookCheckOut' с названием «Отличное название книги». –

0

Изменение Book.BookList от ArrayList<String> до Map<String, Book>, как показано ниже:

public class Book { 

    static Map<String, Book> BookList = new HashMap<>(); 

    ... 

Тогда в CheckOutBook() изменения:

if (Book.BookList.contains(bookCheckOut)) { 
    Book.BookList.remove(bookCheckOut); 
    Book.setStatus("OUT");  //error message   
    Book.setBorrower(borrower); //error message 

    ... 

To:

Book book = Book.BookList.get(bookCheckOut); 
if (book != null) { 
    Book.BookList.remove(bookCheckOut); 
    book.setStatus("OUT");  
    book.setBorrower(borrower); 

    ... 
Смежные вопросы