【问题标题】:Java Scanner error reading spacesJava Scanner 读取空间错误
【发布时间】:2015-05-18 02:15:44
【问题描述】:

我无法使用扫描仪更新对象的变量名称。我向用户提供一个菜单,用户选择他的选择(更新名称),程序要求用户输入新名称,扫描仪读取 system.In 并更新变量的名称。唯一的问题是程序无法读取带有空格的字符串。例如

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 值时,它会读取 dog 而不是等待输入。我读过有关nextLine() 的信息,但它跳过了整个用户输入部分,例如,用newString = myScanner.nextLine() 输出切换newString = myScanner.next()....

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

所以我的问题是如何让扫描仪接受带有空格的输入作为有效字符串。

【问题讨论】:

    标签: java java.util.scanner


    【解决方案1】:

    myScanner.nextInt(); 之后,您应该在读取下一个数据之前添加myScanner.nextLine();

    【讨论】:

      【解决方案2】:

      next 读一个字。如果你想读一整行(直到用户按下 ENTER),使用nextLine

      您收到异常是因为 next 调用读取并返回“T”,而“dog”留给下一次调用 - 恰好是 nextInt,因为“dog”不是诠释。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        • 2017-01-18
        • 2013-06-28
        • 1970-01-01
        • 2012-04-06
        • 2010-11-30
        相关资源
        最近更新 更多