嘿,我这里有一个小怪异的问题,我要用户输入菜单选项,并根据他们选择的内容调用某种方法。
我在使用谷歌搜索后使用了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;
}
}
提前谢谢!
答案 0 :(得分:4)
int menuChoice = scanner.nextInt();
scanner.next();
阅读javadoc扫描仪。等待用户输入:
public String next():[..]此方法可能在等待输入扫描时阻塞
因此在您的程序中,您说:等待用户键入和int,然后等待用户键入某些东西。
删除scanner.next();
,它应该可以工作。
答案 1 :(得分:0)
扫描程序是一种解析单个令牌的类,例如nextInt
,nextDouble
,nextToken
(字符串)。使用相应的测试方法: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()
。