每当我输入一个值时,java scanner就会一直跳过一行

时间:2015-12-05 13:04:24

标签: java for-loop arraylist java.util.scanner do-while

这是我第一次在这里发帖提问。我的扫描仪方法有问题。这是我正在使用的代码

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循环的问题吗?或者循环遍历数组列表

1 个答案:

答案 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;

如果您想知道,我怎么能自己解决这个问题?答案是使用你的调试器,因为这应该是每行代码正在做的事情。