Java用户输入 - 输入一定范围内的整数或循环返回并再试一次

时间:2016-02-06 18:15:09

标签: java loops input integer range

我必须构建一个用户输入模板,您可以在其中输入介于100和200之间的数字。如果输入“goodbye”,则需要退出,如果输入字母,符号,数字范围外的数字等。需要提示你再试一次。如果你输入一个范围内的数字,它将转到另一个问题(我没有在下面的代码中包含它)。

我几乎可以完成所有工作。如果您第一次输入正确的数字,它就有效。 “再见”和错误的角色功能也有效。但是,如果您输入错误的字符(数字或字母),然后,当它提示您再次尝试时,您在该范围内输入了一个正确的号码,它不接受它并再次提示您再试一次。

我需要弄清楚如何输入错误的字符(例如字母或数字超出范围),然后当它提示您再次尝试并且您将数字设置在100-200之间时,它会工作并退出循环(这将使它能够继续下一个问题/循环)。

这是我的代码:

Scanner console = new Scanner(System.in);
    String Input;
    int Number;
    boolean isValid = true;        
        do {
        System.out.println("Enter a valid number:");
        Input = console.nextLine();
           if (Input.equals("goodbye") || Input.equals("GOODBYE")){
               System.out.println("You have left");
              System.exit(0);
           }
        char[] numberTester = Input.toCharArray();
       for (int i = 0; i<Input.length(); i++){
           Character currentChar = new Character (numberTester[i]);
           if (!currentChar.isDigit(numberTester[i])){
             isValid = false;
             System.out.println("Invalid. Try again.");
              i = Input.length();
           }
           if (isValid == true){
           Number = Integer.parseInt(Input);    
           if (Number < 100 || Number > 200){
             isValid = false;
             System.out.println("Invalid. Try again.");
               }
           }
       } 
        } while (isValid == false);
}
        }

3 个答案:

答案 0 :(得分:1)

在开始时,isValid标记设置为true。当此标志为false时,您的do-while循环会运行。如果您在第一轮中输入有效的内容,则退出循环。但是如果你输入的内容无效,你可以将你的旗帜设置为false并永远不会再回来,所以它会永远循环 将isValid标志设置为do while循环中的第一个语句应该可以解决您的问题。

[...]
do{
    isValid = true;
    [...]
} while (isValid == false);

答案 1 :(得分:0)

我认为这项任务的目的是学习如何处理异常。 parseInt会抛出NumberFormatException。使用这个对你有利,而不是toCharArray废话。

public static void main(String args[]) {

    Scanner console = new Scanner(System.in);
    String input;
    int number;
    boolean isValid;

    do {
        isValid = true; // reset the validity
        System.out.print("Enter a valid number: ");
        input = console.nextLine();
        if (input.equalsIgnoreCase("goodbye")) {
            System.out.println("You have left");
            System.exit(0);
        }

        try {
            number = Integer.parseInt(input);
            if (number < 100 || number > 200) {
                isValid = false;
                System.out.println("Invalid. Try again.");
            }
        } catch (NumberFormatException e) {
            isValid = false;
            System.out.println("Invalid. Not a number. Try again.");
        }

    } while (!isValid);
}

答案 2 :(得分:0)

看起来这个问题来自这样一个事实:一旦你将isValid变量设置为false,它就永远不会变为真,所以do-while循环将无限循环。

解决此问题的一种方法是在do-while循环的每个循环开始时将isValid变量设置为true,这样如果在循环中没有任何触发它变为false,则循环将退出结束,因为条件不会成真。