【问题标题】:Checking if an input is an Integer using exceptions - Java使用异常检查输入是否为整数 - Java
【发布时间】:2014-10-06 00:41:40
【问题描述】:

我的方法必须向用户请求输入,检查它是否为整数,如果是则返回该整数。我尝试使用 try catch 和 InputMismatchException 进行此操作。

我在循环时遇到了一个问题,如果我输入一个非整数,它会不断吐出“无效输入”“输入一个整数:”而不是实际要求一个。

public int getInteger(){
    Scanner i = new Scanner(System.in);
    int value = 0;

    for(boolean test = false; test == false;){
        try{
        System.out.println("Enter an integer: ");
        value = i.nextInt();

        test = true;
        return value;
        }
        catch(InputMismatchException e){System.out.println("Invalid input");}
    }
    return value;
} 

【问题讨论】:

  • 通过在 for 循环中启动扫描仪 i 解决了我的问题。
  • MattM - 这是一个糟糕的解决方案。并且不保证能正常工作。

标签: java exception input integer


【解决方案1】:

您需要在循环结束时使用i.nextLine();

    catch(InputMismatchException e){System.out.println("Invalid input");}
    i.nextLine();
}

这样做是从输入流中读取i.nextInt() 未读取的换行符。这也是您的i.nextInt() 在后续呼叫中不断跳闸的原因。

【讨论】:

  • 没问题。如果需要,也可以使用nextLine() 代替nextInt() 并使用Integer.parseInt() 方法解析行。
【解决方案2】:

我建议你在nextInt() 之前调用hasNextInt(),而不是试图抓住Exception。类似的,

public int getInteger() {
    Scanner scan = new Scanner(System.in);
    while (scan.hasNextLine()) {
        if (scan.hasNextInt()) {
            return scan.nextInt();
        } else {
            System.out.printf("%s is not an int%n", scan.nextLine());
        }
    }
    return -1;
}

【讨论】:

  • 如果用户输入“a b c”而不是数字,呼叫next()将无法恢复。
猜你喜欢
  • 2014-03-21
  • 2016-05-19
  • 2013-11-16
  • 2012-09-23
  • 1970-01-01
相关资源
最近更新 更多