java - java代码无限循环,Scanner对象缓冲区可能是

标签 java java.util.scanner infinite-loop

我正在尝试读取开关盒选项的数字,但遇到异常。我会尝试用代码更好地解释问题:

do{
    try{
        loop=false;
        int op=teclado.nextInt();
        //I tryed a teclado.nextLine() here cause i saw in other Q but didn't work
    }
    catch(InputMismatchException ex){
        System.out.println("Invalid character. Try again.");
        loop=true;//At the catch bolck i change the loop value
    }
}while(loop);//When loop is true it instantly go to the catch part over and over again and never ask for an int again

当我输入一个 int 时,它工作得很好,但异常使它重新开始。第二次,程序不要求 int (我认为它可能是一个缓冲区,我需要像 C 中的 fflush(stdin) 这样的东西),并且缓冲区开始疯狂地写入。

最佳答案

您可以从 catch 中创建一个新的 Scanner 实例,以便在失败时获取输入。 编辑:当失败时,您可以使用Scanner.nextLine()前进到换行符之后。 do...while 循环可能不适合这种情况,因为它保证至少执行一次。

一个可以帮助您更多的结构是一个简单的 while 循环。这实际上是一个 while-true-break 类型的循环,它会在有效输入时中断。

while(true) {
    try {
        op=teclado.nextInt();
        break;
    } catch(InputMismatchException ex){
        System.out.println("Invalid character. Try again.");
        teclado.nextLine();
    }
}

关于java - java代码无限循环,Scanner对象缓冲区可能是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10360691/

相关文章:

python - PyGtk3 ~ 允许来自用户的信号,但不允许以编程方式发出信号

javascript - 为什么调用一个简单的辅助函数会导致无限循环?

java - 根据异常类名抛出异常

java - 在Java中显示弹出消息窗口?

java - "do"在这里做什么? ( java )

java - 如何使用扫描仪(system.in)扫描特定字符

Java 客户端抛出不支持的媒体类型异常

java - 解决仅出现在一个编译器中的不匹配异常

java - 为什么 Double.parseDouble(scan.next()) 比 scan.nextDouble() 快这么多?

c++ - 从文件C++读取时发生无限循环