Can';我不明白为什么简单方法在Java中是无限循环的

Can';我不明白为什么简单方法在Java中是无限循环的,java,java.util.scanner,infinite-loop,Java,Java.util.scanner,Infinite Loop,这只是一个简单的小方法,可以让用户输入将整数从十进制转换为二进制。它使用do while循环重新启动并验证有效输入。当它捕捉到InputMismatchException时,它开始无限循环: Must enter a positive integer, try again. Enter positive integer for binary conversion: 我不知道为什么在调用nextInt()时,扫描仪没有导致程序等待新的输入 下面是该方法的代码: public static voi

这只是一个简单的小方法,可以让用户输入将整数从十进制转换为二进制。它使用do while循环重新启动并验证有效输入。当它捕捉到InputMismatchException时,它开始无限循环:

Must enter a positive integer, try again.
Enter positive integer for binary conversion:
我不知道为什么在调用nextInt()时,扫描仪没有导致程序等待新的输入

下面是该方法的代码:

public static void main (String[] theArgs) {
    final Scanner inputScanner = new Scanner(System.in);
    boolean invalidInput = false;
    boolean running = true;
    int input = 0;
    do {
        do {
            System.out.println("Enter positive integer for binary conversion:");
            try {
                input = inputScanner.nextInt();
                if (input < 1) {
                    System.out.println("Must be a positive integer, try again.");
                    invalidInput = true;
                } else {
                    invalidInput = false;
                }
            } catch (final InputMismatchException e) {
                System.out.println("Must enter a positive integer, try again.");
                invalidInput = true;
            }
        } while (invalidInput);
        System.out.println(StackUtilities.decimalToBinary(input));
        System.out.println("Again? Enter 'n' for no, or anything else for yes:");
        if (inputScanner.next().equals("n")) {
            running = false;
        }
    } while (running);
}
publicstaticvoidmain(String[]theArgs){
最终扫描仪输入扫描仪=新扫描仪(System.in);
布尔输入=假;
布尔运行=真;
int输入=0;
做{
做{
System.out.println(“为二进制转换输入正整数:”);
试一试{
input=inputScanner.nextInt();
如果(输入<1){
System.out.println(“必须是正整数,请重试。”);
无效输入=真;
}否则{
无效输入=假;
}
}捕获(最终输入不匹配异常e){
System.out.println(“必须输入一个正整数,再试一次”);
无效输入=真;
}
}while(put);
System.out.println(StackUtilities.decimalToBinary(输入));
System.out.println(“再次?输入'n'表示否,或输入任何其他内容表示是:”);
if(inputScanner.next().equals(“n”)){
运行=错误;
}
}跑步时;
}

当用户输入错误类型的输入时,您需要清除缓冲区,只需使用
catch
块中的
inputScanner.next()
inputScanner.nextLine()
来清除缓冲区

catch (final InputMismatchException e) {
      inputScanner.nextLine();
            System.out.println("Must enter a positive integer, try again.");
            invalidInput = true;
        }

您是否尝试过打印
输入
?您是否知道打印的“”的哪个版本必须是正整数,请重试。(您确定它是异常中的版本吗?)。有关更多提示,请查阅“如何调试小程序”。如果输入无效值,
nextInt()
在不使用无效值的情况下抛出
InputMismatchException
,因此当您循环回时,它仍然存在。在
catch
块中添加例如
next()
以使用无效值。