我无法使用扫描仪更新对象的变量名称。我向用户提供菜单,用户选择他的选择(更新名称),程序要求用户输入新名称,Scanner读取系统。并更新变量的名称。唯一的麻烦是程序无法读取带空格的字符串。例如
while(i ==1 ) {
System.out.printf("\n%s Properties Menu\n---------------\n1.Update Name\n2.Update Registration\n3.Update Transponder\n4.Update Capacity\n5.Update Length\n6.Update Beam\n7.Update Draft\n8.Update Longitude and Latitude\n9.Update Cargo\n10.Display the Ship\n11.Previous Menu\n",shipArrayList.get(decision).getShipName());
shipProperties = myScanner.nextInt(); // error line 121 here
if(shipProperties == 1) {
System.out.print("\nEnter a new name :");
newString = myScanner.next(); // or nextLine():
shipArrayList.get(decision).setShipName(newString);
}
如果我键入tDog
之类的内容,但是如果我输入T dog
,我将获得java.util.InputMismatchException
,输出示例如下
Enter a new name :t dog
t Properties Menu
---------------
1.Update Name
2.Update Registration
3.Update Transponder
4.Update Capacity
5.Update Length
6.Update Beam
7.Update Draft
8.Update Longitude and Latitude
9.Update Cargo
10.Display the Ship
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
11.Previous Menu
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at main.Map.updateShip(Map.java:121)
at main.main.main(main.java:48)
Java Result: 1
因此,我猜测它只读取t,当扫描仪扫描shipProperty值时,它会读取狗而不是等待输入。我读过有关nextLine()
的内容,但会跳过整个用户输入部分,例如,使用newString = myScanner.next()
输出切换newString = myScanner.nextLine()
....
DarkGoat Properties Menu
---------------
1.Update Name
2.Update Registration
3.Update Transponder
4.Update Capacity
5.Update Length
6.Update Beam
7.Update Draft
8.Update Longitude and Latitude
9.Update Cargo
10.Display the Ship
11.Previous Menu
1 //i enter 1 to update name
Enter a new name : //skips name input and waits for property input
Properties Menu
---------------
1.Update Name
2.Update Registration
3.Update Transponder
4.Update Capacity
5.Update Length
6.Update Beam
7.Update Draft
8.Update Longitude and Latitude
9.Update Cargo
10.Display the Ship
11.Previous Menu
所以我的问题是如何让Scanner接受带空格作为有效字符串的输入。
答案 0 :(得分:1)
next
读一个字。如果要读取整行(直到用户按下ENTER键),请使用nextLine
。
你得到了例外,因为next
调用会读取并返回" T"以及" dog"留给下一个电话 - 恰好是nextInt
,因为" dog"不是一个int。
答案 1 :(得分:0)
在myScanner.nextInt();
之后,您应该在阅读下一个数据之前添加myScanner.nextLine();
。