所以我在这里编写代码只是为了好玩,但我想出了一个我似乎无法解决的错误。这个代码块应该是一个int ...起初我只在while循环中有hasNextInt()来尝试确保我得到正确的输入,但是命运会有它...我得到了例外。然后我添加了一个尝试捕获它认为也许我只是做错了...仍然我得到相同的错误。我不知道这里有什么不对。这实际上是我第一次使用try catch块(仍然是一个菜鸟)。它对我来说很好看,我在网上查看了文档并做了一些小的研究,但无济于事。任何人都可以在这里找出错误吗? 看看:
do{
System.out.println("How much AP do you want to allocate towards HP? ");
try {//added try catch... still throwing the exception..
while(!in.hasNextInt()){//this should've been enough, apparently not
System.out.println("That is not a valid input, try again.");
in.nextInt();
}
} catch (InputMismatchException e) {
System.out.print(e.getMessage()); //trying to find specific reason.
}
hpInput = in.nextInt();
}while(hpInput < 0 || hpInput > AP);
如果我输入一个字符串,它会给我“那不是一个有效的输入,再试一次。” line ..但异常仍然会发生,而不仅仅是循环,直到检测到实际的int ...帮助PLZ ..
答案 0 :(得分:2)
您的while
循环应该看起来像这样
while(!in.hasNextInt()){ // <-- is there an int?
System.out.println("That is not a valid input, try again.");
// in.nextInt(); // <-- there is not an int...
in.next(); // <-- this isn't an int.
}
因为Scanner
没有int
。
答案 1 :(得分:0)
在输入内容之前,你无法真正验证Scanner
中的值,但一旦输入,验证它就为时已晚......
相反,您可以使用第二个Scanner
来验证您通过键盘从用户获得的String
结果,例如
Scanner kbd = new Scanner(System.in);
int result = -1;
do {
System.out.println("How much AP do you want to allocate towards HP? ");
String value = kbd.nextLine();
Scanner validate = new Scanner(value);
if (validate.hasNextInt()) {
result = validate.nextInt();
}
} while (result < 0);