做 while 循环和用户输入问题

do while loop and user input issue

我正在尝试制作一个用户需要输入随机整数的程序。如果用户输入一个字符串,我希望弹出一条错误消息:"This is not a number",然后重新启动程序,直到用户输入一个数字。到目前为止我得到了这个并且我被卡住了。如果我输入一个字符串并且程序崩溃,我只会收到一条错误消息。

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int number = 0;


    do {
        System.out.println("Input a number!");
        number = scanner.nextInt();
        if (!scanner.hasNextInt()) {
            System.err.println("This is not a number");
        }

    } while (!scanner.hasNextInt());

    System.out.println("You entered: " + number);

}

您收到 InputMisMatchException,因为如果您将字符串输入 scanner.nextInt(),它会立即给出错误并在执行任何其他操作之前停止程序,因此它不会到达您的 if 语句.解决此问题的一种方法是将用户输入作为字符串接收,try 将其解析为 int,如果不抛出异常则结束循环。这是我的实现:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String input = "";
    int number = 0;
    boolean end = true;


    do {
        System.out.println("Input a number!");
        input = scanner.nextLine();
        try {
            number = Integer.parseInt(input);
            end = true;
        } catch(Exception e) {
            System.err.println("This is not a number");
            end = false;
        } 

    } while (!end);

    System.out.println("You entered: " + number);

}

看看下面的代码是否可以帮助实现你想要做的事情。

public class Solution {

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String number;
    do {
        System.out.println("Input a number!");
        number = scanner.next();
    } while (!isNumeric(number));

    System.out.println("You entered: " + number);
  }

  public static boolean isNumeric(final String str) {
    // null or empty
    if (str == null || str.length() == 0) {
        return false;
    }
    return str.chars().allMatch(Character::isDigit);
  }
}