2015-02-24 68 views
0

我有一個包含書籍的數組列表。我試圖做的(出於各種原因)是使用While循環來繼續添加圖書到我的數組列表,直到我告訴程序停止。爲了讓它停下來,我正在使用掃描儀詢問用戶是否應該添加另一本書。如果用戶說是,那麼該方法會重複,否則,該方法將停止。使用While循環添加到數組列表

不幸的是,我被困在2個領域(現在)。首先,我不知道如何將決定進入方法,我想:

while(decision.equals("Yes"){addBooks(anyTitle,anyAuthor);}, 

然而,這只是似乎錯了,因爲它進入一個循環(而我想要的),但它會導致2個問題:一)即使我輸入其他東西,該方法也不會結束(除非我使用另一個掃描器幷包含一箇中斷),並且B)將相同的輸入字段反覆插入數組列表中,而不會給我一個輸入的機會新的字符串。

/** 
* Method to add a single book 
*/ 
public void setOneBook(String anyTitle, String anyAuthor){ 
    bookList.add (new Book(anyTitle,anyAuthor)); 
} 

/** 
* Method to add books to collection until the command to stop is given. 
*/ 
public void addBooks(String anyTitle, String anyAuthor){ 
    bookList.add (new Book(anyTitle,anyAuthor)); 
    System.out.println("Would you like to add another book?"); 
    String decision = keybd.next(); 
} 

我現在感覺很蠢,所以請保留任何諷刺評論給自己。

雖然這樣,但我會亂搞我的代碼,所以如果有任何改變(好或壞),我會更新我的文章。

+0

的'decision'聲明裏面'addBooks()'是不一樣的變量作爲一個控制你的循環,因爲在Java [一切都通過值傳遞](http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value)。 – azurefrog 2015-02-24 03:29:36

+0

你想要做的事聽起來非常類似於我提出的[這裏](http://stackoverflow.com/a/28575639/3558960)。 – 2015-02-24 03:52:15

回答

5

單獨從更新列表

String decision = "No"; 
do { 
    System.out.println("Would you like to add another book?"); 
    decision = keybd.nextLine(); 
    if (decision.equals("Yes")) { 
     // Get information about book 
     String anyTitle = keybd.nextLine(); 
     String anyAuthor = keybd.nextLine(); 
     addBooks(anyTitle,anyAuthor); 
    } 
} while (decision.equals("Yes")); 

你可以更進一步,使得addBook方法,提示用戶對情報的問這個問題的詳細信息的邏輯...

public void addBook() { 
    String anyTitle = keybd.nextLine(); 
    String anyAuthor = keybd.nextLine(); 
    addBooks(anyTitle,anyAuthor); 
} 

然後,你可以只調用addBookwhile-loop

do { 
    System.out.println("Would you like to add another book?"); 
    String decision = keybd.nextLine(); 
    if (decision.equals("Yes")) { 
     addBook(); 
    } 
} while (decision.equals("Yes")); 

進一步解耦你的代碼,讓你打電話addBook只要你想提示關於這本書的信息的用戶並將其添加到列表中

+0

關於第一部分答案的三個問題:1)根據您的建議,無法找到決策變量。我嘗試了一些東西,但他們沒有幫助。 2)如果方法名是:public void addBooks(String anyTitle,String anyAuthor)那麼他們甚至需要在編碼中再次標識爲字符串? 3)即使擱置另外兩個問題,當我開始工作時,即使它顯示程序正在運行,它也沒有給我任何地方輸入本書的信息。 – Frog666 2015-02-24 04:52:30

+0

1-'決定'應該在'do'循環開始之前聲明,糾正; 2-是的,因爲該方法的參數只在方法內具有上下文/含義,對於其餘代碼而言,它們只是通過其傳遞信息的地方保留; 3-然後,允許用戶輸入圖書信息的條件未得到滿足,請記住,'equals'區分大小寫,所以您必須正好輸入「是」 – MadProgrammer 2015-02-24 04:56:07

+0

很高興幫助... – MadProgrammer 2015-02-24 05:10:02

2

如果我理解你的代碼的各種片段,我會強烈建議你考慮一些調用你的方法setOneBook ...但我建議你換個方法可見性(和名稱) -

private void addOneBook(String anyTitle, String anyAuthor){ 
    bookList.add (new Book(anyTitle,anyAuthor)); 
} 

你已經使用encapsulation隱藏,增加了一本書的方法,這種方法。接下來,更改公共方法。您正在將多本書籍,所以不要在標題或作者通過 -

public void addBooks() { 
    do { 
     String anyTitle = keybd.nextLine(); 
     String anyAuthor = keybd.nextLine(); 
     addOneBook(anyTitle, anyAuthor); 
     System.out.println("Would you like to add another book?"); 
    } while (keybd.next().equalsIgnoreCase("yes")); 
}