InputMismatchException ...即使使用try / catch

时间:2015-02-26 02:53:16

标签: java while-loop java.util.scanner do-while inputmismatchexception

所以我在这里编写代码只是为了好玩,但我想出了一个我似乎无法解决的错误。这个代码块应该是一个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 ..

2 个答案:

答案 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);