验证数字范围内的扫描仪输入

时间:2015-06-07 03:35:48

标签: java

我目前正在制作我在游戏机中执行的第一款游戏。

我被要求验证可以使用简单代码完成的输入。目标是输入,然后验证该数字是否为整数,并且范围为1-4。如果可能,应该用基本算法解决问题。

问题在于它不会给我我想要的结果。当我输入一个字符串时它会起作用,但它会在我输入的每个数字上循环,包括该范围内的数字。有谁知道为什么?

public class Menu {

    public static void main(String[] args) {

        try (Scanner scanner = new Scanner(System.in)) {
            int input = 0;
            int min = 1;
            int max = 4;

            boolean inputValidate;

            System.out.println("Main Menu");
            System.out.println("=========");
            System.out.println("1. Play Game");
            System.out.println("2. About");
            System.out.println("3. View Saved Games");
            System.out.println("4. Exit");
            System.out.println("");

            do {
                System.out.print(">> ");
                if (!scanner.hasNextInt()) {
                    inputValidate = false;
                    System.out.println("Not a number. Please input number 1-4.");
                    scanner.nextLine();
                } else if (input <= max && !(input < min)) // if input <= 4 and input is not less than 1
                {
                    input = scanner.nextInt();
                    inputValidate = true;
                } else {
                    inputValidate = false;
                    System.out.println("Not in range. Please input number 1-4.");
                    scanner.nextLine();
                }
            } while (!(inputValidate));

            switch (input) {
                case 1:
                    break;

                case 2:
                    System.out.println("Good work!");
                    break;

                case 3:
                    break;

                case 4:
                    break;
            }

        }
    }
}

2 个答案:

答案 0 :(得分:2)

因为您将input实例化为0,但从未给用户提供更改此功能的机会,前两个条件的条件始终为false(从扫描程序中读取任何内容,0为不在minmax之间,因此程序每次都会落到else。只需在do-while之前添加一条语句,该语句将从用户处获取input的值。

input = scanner.nextInt();

// your do-while loop

(您也可能需要稍微调整代码以获得您正在寻找的互动类型。提示 - 您正在从用户那里读取两个值。)

答案 1 :(得分:1)

正如克林特所说,问题出在你的意见中。这是一个如何解决这个问题的演示,

try (Scanner scanner = new Scanner(System.in)) {

            int input = 0;
            int min = 1;
            int max = 4;

            boolean inputValidate = false;

            System.out.println("Main Menu");
            System.out.println("=========");
            System.out.println("1. Play Game");
            System.out.println("2. About");
            System.out.println("3. View Saved Games");
            System.out.println("4. Exit");
            System.out.println("");

            do {
                System.out.print(">> ");

                try {
                    input = scanner.nextInt();
                    if (input >= min && input <= max) {
                        inputValidate = true;
                    } else {
                        System.out
                                .println("Not in range. Please input number 1-4.");
                        scanner.nextLine();
                    }
                } catch (InputMismatchException exception) {
                    System.out
                            .println("Not a number. Please input number 1-4.");
                    scanner.nextLine();
                }

            } while (!(inputValidate));