试图打破扫描仪

时间:2015-02-26 17:07:09

标签: java

我有一个只需要整数的扫描仪输入。如果我要键入一个字符串,它会拒绝并要求用户键入,直到它看到一个正确的整数。我有一个try / catch块,但是即使用户为它输入一个整数,它仍然会继续提示用户输入另一个整数。如何以这样的方式对其进行编码:一旦读取了第一个整数,它将完全停止程序并返回结果?

这是我现在的代码:

public static void main(String[] args) {
    double max = Integer.MIN_VALUE;
    int key1 = 0;


    while(true){
        System.out.println("Enter integer number only");
        Scanner in = new Scanner(System.in);
        String input = in.next();
        int b =0;   

        try (BufferedReader br = new BufferedReader(new FileReader(
                "readfromfile.txt"))) {
            b = Integer.parseInt(input);
            if(b == (int)b){
                System.out.println("Correct Integer entered!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NumberFormatException ne) {
            System.out.println("Input is not a number, please enter number!");
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您正在循环while (true),因此您的循环将永远不会在写入时结束。

您可以在获得终止循环的号码后添加break语句:

    if(b == (int)b){
        System.out.println("Correct Integer entered!");
        break;
    }

您可以在Java Tutorials中详细了解break和其他分支语句。这些是Java的基础部分,因此您应该熟悉它们。

另一种方法是使用变量来跟踪您是否找到了数字。

您可以将变量的初始状态设置为while (true),而不是循环true,并在找到您喜欢的数字后将其翻转:

    boolean stillLooking = true;
    while (stillLooking) {
        ...
        if(b == (int)b){
            System.out.println("Correct Integer entered!");
            stillLooking = false;
        }
        ...
    }

另外需要注意的是,Integer.parseInt(input)可以保证返回int,或者抛出NumberFormatException。尝试检查int - ness对于您已编写的异常处理是多余的,因此您可以这样做:

    b = Integer.parseInt(input);
    // if input cannot be parsed to an int, this line will not be reached
    System.out.println("Correct Integer entered!");

答案 1 :(得分:0)

不应使用while (true)进行循环,而应该使用像:

这样的警卫
boolean correctAnswer = false;
while (!correctAnswer) {
   // read input from user
   // ...
   if (<input is what expected>) {
      correctAnswer = true;
   }
}

注意:

if(b == (int)b){
    System.out.println("Correct Integer entered!");
}

将始终打印Correct...,因为b始终等于(int)b,因为b被声明为int。我想你想要与你尚未使用的文件中读取的值进行比较。