validation数字范围内的扫描仪输入

我正在创建我的第一个在控制台中执行的游戏。

我被要求validation输入,可以使用简单的代码完成。 目标是输入,然后validation该数字是否为整数,并且范围为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; } } } } 

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

 input = scanner.nextInt(); // your do-while loop 

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

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

 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));