У меня проблемы с обновлением имени переменной для объекта с помощью сканера. Я предлагаю меню пользователю, пользователь выбирает свой выбор (обновление имени), программа просит пользователя ввести новое имя, Сканер читает 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, он читает собаку вместо ожидания ввода. Я читал о 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
поэтому мой вопрос заключается в том, как заставить сканер принимать ввод с пробелами как допустимую строку.