java - 尝试/捕捉无限循环?

标签 java while-loop try-catch

<分区>

帮助,我是 java 的新手,我正在尝试创建一个循环,要求用户输入一个数字。如果用户输入的不是数字,我想捕获异常并再次尝试获取正确的输入。我用一个 while 循环来做到这一点,但是在错误发生后,它没有机会让用户输入任何内容,它会循环除此以外的所有内容。请帮助我了解问题所在以及正确的方法...谢谢。这是我的:

    import java.util.Scanner;
    import java.util.InputMismatchException;

    public class simpleExpressions {
    public static void main (String[] args) {
      Scanner keyboard = new Scanner(System.in);

      while ( true ) {
        double numOne;
        System.out.println("Enter an Expression ");
        try {
          numOne = keyboard.nextInt();
          break;
        } catch (Exception E) {
          System.out.println("Please input a number only!");
        } //end catch
      } //end while
    } //end main

最佳答案

while ( true ) 
{
  double numOne;
  System.out.println("Enter an Expression ");
  try {
    numOne = keyboard.nextInt();
    break;
  }
  catch (Exception E) {
    System.out.println("Please input a number only!");
  }

这有几个问题:

  • numOne 没有提前初始化,所以在 try-catch 之后不会明确赋值,所以你不会'无法引用它;
  • 如果您计划在循环之后使用numOne,那么您必须在循环范围之外声明它;
  • (您的直接问题)在异常发生后您不调用 scanner.next() 因此您永远不会使用未解析为 int 的无效 token .这会使您的代码在第一次遇到无效输入时进入无限循环。

关于java - 尝试/捕捉无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869434/

相关文章:

java - 限制重复加法测验 - While 循环 - Java

java - 在 Java try block 中找不到符号

c++ - 尝试/捕获整个程序

c# - 为什么我无法在 Entity Framework 的 SaveChanges() 方法上捕获 SqlException

java - 显示 setter/getter

java - 排列数字,但输出变量名称

python - 在 python 的 while 循环中更改标志值的可能方法?

java - while循环: negative input checking and adding try catch for strings

java - Hibernate 可以将列的子集映射到内部子 Pojo 中

Java:在方法参数中传递文本文件