2015-11-06 57 views
1
import java.util.Scanner; 

public class Library { 
    public static void main(String [] args) { 
    /* 
    * Patron class: name + 3 books 
    * Book class: author + title 
    */ 
    Book TwelveYears = new Book ("12 Years a Slave", "Solomon Northup"); 
    Book Diary = new Book ("The Diary of John Smith", "John Smith"); 
    Book Fahrenheit451 = new Book ("Fahrenheit 451", "Ray Bradbury"); 
    Book Gatsby = new Book ("The Great Gatsby", "Fitzgerald"); 
    Book Antigone = new Book ("12 Years a Slave", "Sophocles"); 




    System.out.println("Welcome to library account management! Here is a list of books to check out: " +TwelveYears.getBookTitle()+", "+Diary.getBookTitle()+", "+Fahrenheit451.getBookTitle()+", "+Gatsby.getBookTitle()+", "+Antigone.getBookTitle()+"."); 
    Scanner sc=new Scanner(System.in); 
    System.out.println("Enter your name!"); 
    String enteredName = sc.nextLine(); 
    System.out.println("Enter your first book! Enter it exactly as seen above."); 
    String book1 = sc.nextLine(); 
    System.out.println("Enter your second book!"); 
    String book2 = sc.nextLine(); 
    System.out.println("Enter your third book!"); 
    String book3 = sc.nextLine(); 
    Patron patron1 = new Patron(enteredName, book1, book2, book3); 
    book1 = //line I need help on 
    System.out.println("Here are the books you are checking out: " +book1+ ", " +book2+ ", " +book3+ "."); 





    } 

} 

在這裏,我試圖把book1變量,並正確地與一個類的成員assosciate它。我認爲解釋我在這裏要做的最好的方法是用一個例子:如果用戶輸入的book1是「12年奴隸」,那麼book1的值將是「TwelveYears」,這是開始附近的類定義之一的代碼,所以在將來,我可以使用像book1.getAuthor這樣的訪問器/增變器方法。使用掃描儀的輸入來分配類

我剛剛學習java,所以我缺乏正確解釋這個最有可能的方式,所以我很抱歉,但任何幫助將不勝感激,並且我會很樂意回答任何問題,如果我正在嘗試在這裏做,但我希望我很清楚。

謝謝!

+0

book1.getAuthor(),因爲BOOK1將無法正常工作是一個實例一個字符串。如果那是你想要的。 – Sekula1991

+0

是否指您如何以結構化的方式構建您的代碼以根據用戶輸入的內容來檢索圖書?比如用戶輸入書名或作者是否返回相關書籍? – whitecoffee

回答

2

匹配如果你必須決定哪些對象來創建基於一個字符串,你可以簡單地做書的標題一堆檢查,並確定哪些對象來創建。假設TwelveYearsGreatGatsbyBook既繼承,那麼你可以做:

Book unknownBook; 
switch(bookTitleScanned) 
{ 
    case("Twelve Years a Slave") 
     unknownBook = new TwelveYears(); 
    case("Great Gatsby") 
     unknownBook = new GreatGatsby(); 
    ... 
} 

這裏您Book引用可以指向TwelveYearsGreatGatsby因爲polymorphism

但這裏可能是一個更好的方式做你想要的東西:
假設所有對象爲你的目的非常相似(在你的榜樣,你有book就像TwelveYearsGreatGatsby),如果你只是寫可能更容易一個班,說Book,讓這個班做所有的處理,而不是創建單獨的類。

然後只需創建Book類的實例,指定書名爲屬性這些情況,並收集他們在某種Collections的對象,這將使你的代碼更加靈活和可重複使用(哎你就可以通過循環您Book如果你把它們放在一個ArrayList)。

具體而言,您Book類可以有一個屬性說bookName和方法,如

public void getBookName() 
{ 
    return bookName; 
} 

甚至:

public void handleParticularBook() 
{ 
    if (bookName.equals("GreatGatsby")) 
     System.out.println("My favorite book!"); 
    else if ... 
} 
+0

他只有一本Book類。 – tam5

+1

我相信OP的問題是「使用掃描儀的輸入來分配類」,所以我假設有多個類可用。 –

+1

謝謝你寫得很好的答案!它幫助了很多! –

1

將所有書放在ArrayList<Book>。迭代ArrayList和使用book1.equals(a1.get(i).getBookName)如果book1=a1.get(i).getBookTitle