扫描程序需要两次输入才能继续

时间:2019-04-15 07:35:46

标签: java java.util.scanner

嘿,我这里有一个小怪异的问题,我要用户输入菜单选项,并根据他们选择的内容调用某种方法。

我在使用谷歌搜索后使用了scan.next(),但是由于某种原因,仅当我输入1或2时,我按Enter键,然后再按一次1就可以了。但是奇怪的是它立即调用选项3、4、5和6,而无需我两次输入数字。

我已经在scans.nextInt()之后尝试使用了scanr.nextLine(),而这仅使我不得不将选项1或2放入而没有结果。

while(exit == 0)
    {

            System.out.println("\n");
            System.out.println("Menu 1: Display fullname of the user \n");
            System.out.println("Menu 2: Display of user information \n");
            System.out.println("Menu 3: Change password \n");
            System.out.println("Menu 4: List all of users in the library full name\n");
            System.out.println("Menu 5: Search for a book\n");
            System.out.println("Press 6 to search for a books location in the library\n");
            System.out.println("Press 0 to exit\n");

            System.out.println("Enter choice: ");
            int menuChoice = scanner.nextInt();
            scanner.next();


                     if(menuChoice == 1)
                    {
                        displayUserFullName();
                    }
                    else if(menuChoice == 2)
                    {
                        displayUserInformation();
                    }

                    else if(menuChoice == 3)
                    {
                        menuForChangePassword();
                    }

                    else if(menuChoice == 4)
                    {
                        displayAllUserInSystem();
                    }
                    else if(menuChoice == 5)
                    {
                        searchBookByISBN();
                    }
                    else if(menuChoice == 6)
                    {
                        searchBookLocation();
                    }
                    else if(menuChoice == 0)
                    {
                        exit = 1;
                    }
}

提前谢谢!

2 个答案:

答案 0 :(得分:4)

int menuChoice = scanner.nextInt();
scanner.next();

阅读javadoc扫描仪。等待用户输入:

  

public String next():[..]此方法可能在等待输入扫描时阻塞

因此在您的程序中,您说:等待用户键入和int,然后等待用户键入某些东西。

删除scanner.next();,它应该可以工作。

答案 1 :(得分:0)

扫描程序是一种解析单个令牌的类,例如nextIntnextDoublenextToken(字符串)。使用相应的测试方法:hasNextInt等。 您无需进行所有这些解析,因此对输入的行或其他Reader类(InputStreamReader,BufferedReader)使用nextLine

您也可以使用switch代替if else if

       String menuChoice = scanner.nextLine();
       switch (menuChoice) {
       case "1":
           displayUserFullName();
           break;
       case "2":
           displayUserInformation();
           break;
       case "3":
           menuForChangePassword();
           break;
       case "4":
           displayAllUserInSystem();
           break;
       case "5":
           searchBookByISBN();
            break;
       case "6":
           searchBookLocation();
           break;
       case "0":
           exit = 1;
           break;
       default:
           System.out.printf("Unknown choice: '%s'%n", menuChoice);
       }

menuChoice将包含整行,没有行末。

您可以将int与Integer.parseInt(menuChoice)一起使用,但这将在错误的输入上抛出NumberFormatException,从而中止程序。 Scanner.nextInt也会挂起,实际上需要一个hasNextInt()