这是我第一次在这里发帖提问。我的扫描仪方法有问题。这是我正在使用的代码
public void loanBook() {
Scanner input = new Scanner(System.in);
boolean successful = false;
do {
System.out.println(
"\nPlease enter the book ID of the book that you wish to take out (Press 9 to exit to the main menu)");
if (input.nextInt() == 9) {
successful = true;
break;
}
int bookID = input.nextInt();
for (int i = 0; i < Books.size(); i++) {
if (Books.get(i).getBookID() == bookID) {
do {
System.out.println("\nHow long would you like to loan the book for (20 Days maximum):");
int durationOnLoan = input.nextInt();
if (durationOnLoan <= 20 && 1 <= durationOnLoan) {
Books.get(i).setDurationOnLoan(durationOnLoan);
successful = true;
} else {
System.out.println("The number of days you have entered is invalid");
}
} while (successful == false);
System.out.println("\nThe book " + Books.get(i).getTitle() + " is now on loan");
Books.get(i).setOnLoan(true);
Books.get(i).setNumOfLoan(Books.get(i).getNumOfLoans() + 1);
successful = true;
}
}
我正在研究的项目是一个库数组列表,它包含书籍对象(数组列表工作正常)。 for循环用于遍历库数组列表以查看该书是否存在。 每当我运行程序并输入书籍ID的有效输入时,就会发生这种情况
请输入您要取出的图书的图书ID
101 //这是我有效的输入
101 //我必须第二次输入才能继续工作并继续下一段代码
任何想法?这可能是do while循环的问题吗?或者循环遍历数组列表
答案 0 :(得分:0)
在这一行
if (input.nextInt() == 9) {
你读了这个号码,如果它不是9,你继续。但你也放弃它。这就是为什么你必须再次输入它。一个简单的解决方案是使用一个已经完成的变量。
int bookID = input.nextInt();
if (bookID == 9) // check the save value so you don't have to enter it twice.
break;
如果您想知道,我怎么能自己解决这个问题?答案是使用你的调试器,因为这应该是每行代码正在做的事情。