我有一个包含书籍的数组列表。我想要做的(出于各种原因)是使用While循环继续将书籍添加到我的数组列表,直到我告诉程序停止。为了让它停止,我使用扫描仪询问人类用户是否应该添加另一本书。如果用户说“是”,则该方法将重复,否则该方法将停止。
不幸的是,我被困在2个区域(暂时)。首先,我不确定如何将决定插入到方法中,我尝试了:
while(decision.equals("Yes"){addBooks(anyTitle,anyAuthor);},
然而,这似乎是错误的,因为它进入一个循环(虽然我想),但它导致2个问题:A)即使我输入其他东西,该方法也不会结束(除非我使用另一个扫描仪并包括断开),和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 :(得分: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);
}
然后,您可以从addBook
while-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
答案 1 :(得分: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"));
}