我正在尝试这行代码。我想要它取一个字符串,如果它是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很新,需要整理出这个错误。
错误是...... 线程“main”中的异常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)
感谢您的帮助。
答案 0 :(得分:0)
即使问题已经得到解答(错误是在另一个类中)并且提供的代码没有引起任何错误,您可能希望稍微改进一下代码。为了便于阅读和理解,以防您以后需要更改。
您可以将输入和验证部分包装在方法中:
private int readIntBetweenMinAndMax(String msg, int min, int max) {
Scanner scanner = new Scanner(System.in);
System.out.println(msg);
int userInput;
do {
try {
userInput = Integer.parseInt(scanner.nextLine());
} catch (NumberFormatException e) {
System.err.println("Please enter a valid integer");
continue;
}
if (userInput > max || userInput < min) {
System.err.println("Please enter a integer between " + min + " and " + max);
continue;
}
return userInput;
} while (true);
}
上面的方法打印一个提供的字符串msg
,然后读入一个整数。它会检查用户输入是否为整数,以及大于或等于是否超过min
且小于或等于而不是max
。如果三个条件中的一个失败,则该方法将打印错误消息并提示用户输入新的输入,直到其正确为止
注意:您当然也可以包含&#34; TRUE&#34;和&#34;错误&#34;如果你想要输出
因此,您只需要在guessEnter
方法中调用该方法两次:
public void guessEnter() {
guessX = readIntBetweenMinAndMax("Enter a value for the column!", 1, 10) - 1;
guessY = readIntBetweenMinAndMax("Enter a value for the row!", 1, 10) - 1;
}
这将接受它们之间的一个,十个和任何数字。并在代码中减去一个。
如上所述,它只是一个建议,我不确定是否所有内容都是您的代码正确但我希望它有所帮助(: