提问人:Infernalissss 提问时间:6/30/2021 最后编辑:Hovercraft Full Of EelsInfernalissss 更新时间:6/30/2021 访问量:516
在单词之间使用空格时出现输入不匹配异常
input mismatch exception while using space in between words
问:
我正在做一个项目,我已经完成了它,我有一个非常简单的问题,这让我非常困惑。我试图要求用户从菜单中输入一个数字,并根据不同的事情发生,但是每当我在单词之间输入空格时,我都会遇到输入不匹配异常。我在代码的最后一行收到该错误,请在下面检查我的代码,谢谢。
System.out.println("Enter: " + "\n1.Enter Name" +"\n2.Enter another name" + "\n3.Exit");
int userChoice = kb.nextInt();
while(userChoice != 3) {
if(userChoice == 1) {
System.out.println("Enter name");
String name = kb.next();
}
if(userChoice == 2) {
System.out.println("Enter anohter name");
String anotherName = kb.next();
}
if(userChoice == 3)
break;
System.out.println("Enter: " + "\n1.Enter Nmame" +"\n2.Enter another name" + "\n3.Exit");
userChoice = kb.nextInt();
}
答:
1赞
maloomeister
6/30/2021
#1
问题在于您对 的使用,例如,想要输入多个由空格分隔的“单词”。(免责声明:我理解您的问题,因为您想为“名称”输入多个单词,此答案以此为先决条件)Scanner#next()
请参阅以下 Scanner#next()
Javadoc 摘录:
从此扫描程序查找并返回下一个完整令牌。完整标记的前面和后面是与分隔符模式匹配的输入。
的默认分隔符是空格。因此,当您向用户请求名称时,并且用户想要输入“John Doe”,则只会读取“John”,而“Doe”将保留,这很可能会导致您看到的错误。Scanner
我建议的解决方法是在逐行提供每个输入的同时读取整行。nextLine()
但是,请注意此问题:使用 next() 或 nextFoo() 后,扫描仪跳过了 nextLine()?
牢记这一点,我将按如下方式修改您的代码:
String name = "";
String anotherName = "";
System.out.println("Enter: " + "\n1.Enter Nmame" +"\n2.Enter another name" + "\n3.Exit");
int userChoice = kb.nextInt();
while(userChoice != 3) {
kb.nextLine(); // consumes the newline character from the input
if(userChoice == 1) {
System.out.println("Enter name");
name = kb.nextLine(); // reads the complete line
// do something with name
} else if (userChoice == 2) {
System.out.println("Enter another name");
anotherName = kb.nextLine(); // reads the complete line
// do something with anotherName
}
System.out.println("Enter: " + "\n1.Enter Nmame" +"\n2.Enter another name" + "\n3.Exit");
userChoice = kb.nextInt();
}
旁注:
- 我移动了 ur 和 变量的声明,因为它们不必每次都重新声明。
name
anotherName
- 但是,您实际上应该对它们执行某些操作(例如,将它们保存在列表中,或使用它们创建一些对象),否则它们将在下一次循环迭代中丢失。
- 您可以省略检查,因为这与 .
if (userChoice == 3)
while (userChoice != 3)
输入示例:
Enter:
1.Enter Nmame
2.Enter another name
3.Exit
1
Enter name
John Doe
1.Enter Nmame
2.Enter another name
3.Exit
3
评论