【发布时间】:2016-01-13 01:29:09
【问题描述】:
我正在尝试执行这行代码。我希望它接受一个字符串,如果它是 1,2,3,4,5,6,7,8,9 或 10 将其解析为 int 然后检查它是否在 0 和 9 之间(在 - 1)。问题出在扫描仪发生后,无论我做什么都会出错...
public void guessEnter() {
Scanner scan = new Scanner(System.in);
String guessXS;
String guessYS;
boolean pass1;
boolean pass2;
do{
do{
System.out.println("Enter a value for the column!");
guessXS = scan.nextLine();
switch(guessXS){
case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9":case "10":
System.out.println("TRUE");
pass1 = true;
break;
default:
System.out.println("FALSE");
pass1 = false;
break;
}
}while(pass1 == false);
do{
System.out.println("Enter a value for the row!");
guessYS = scan.nextLine();
switch(guessYS){
case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": case "10":
pass2 = true;
System.out.println("TRUE");
break;
default:
pass2 = false;
System.out.println("FALSE");
break;
}
}while(pass2 == false);
guessX = Integer.parseInt(guessXS) - 1;
guessY = Integer.parseInt(guessYS) - 1;
}while(guessX >= 0 && guessX <= 9 && guessY >= 0 && guessY <= 9);
}
为什么会发生这种情况我无法理解。我是 java 新手,需要解决这个错误。
错误是... 线程“主”java.util.InputMismatchException 中的异常
at java.util.Scanner.throwFor(Scanner.java:864)
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 shipLocation.xyInput(shipLocation.java:11)
at battleShipMain.main(battleShipMain.java:53)
感谢您的帮助。
【问题讨论】:
-
崩溃时输入的字符串是什么?
-
为什么不直接使用带有 try-catch 块的 Integer.parseInt() 并然后检查数字范围?
-
为什么不直接使用带有 try-catch 块的 Integer.parseInt() 然后检查数字范围?因为如果它不作为 int 输入,我想让它成为安全的。 ---- 崩溃时输入的字符串是什么?我尝试了所有这些,除了整数之外,它们都崩溃了。
-
您是否更改了方法的名称?根据您的堆栈跟踪,错误似乎在名为
xyInput()的方法中,而不是在guessEnter()中。 -
是的!杰出的!那就是我看错了选择列号println!谢谢。
标签: java string exception input java.util.scanner