如何防止错误的用户输入变量?

How to prevent wrong user input on a variable?

我目前正在尝试构建防止错误用户输入的代码(例如,将 char/string 存储为整数)但我无法使其正常工作...

    public static void main(String[] args) {
    int num=0, option=0;
    boolean keep=true;
    
    Scanner scan = new Scanner(System.in);
    
    while(keep) {
        System.out.println("1 - Test Exception.");
        System.out.println("2 - Out.");
        
        option = scan.nextInt();
        switch(option) {
        
        case 1:
            System.out.println("Write a number: ");
            if(scan.hasNextInt()) {
                num = scan.nextInt();
            }
            else {
                System.out.println("Wrong input...");
            }
            break;
        case 2:
            keep=false;
            System.out.println("Bye !");
            break;
        }
        
    }

}

我一输入 char/string,代码就停止工作。异常发生在行 option = scan.nextInt();

我错过了什么?

您的输入类型仅为整数 您是如何传递 string/char 值的。如果您的输入是 string/char.

,请使用 Integer.parseInt(选项)

您希望用户输入 int,但是,用户可以随意输入任何内容。因此你需要确保输入可以被解析。

String userInput = scan.next(); //scan the input
int value;
try {
    value = Integer.parseInt(userInput); // try to parse the "number" to int
} catch (NumberFormatException e) {
    System.out.println("Hey, you entered something wrong...");
    // now you can ask the user again to enter something
}

您可以将选项声明移到循环内并使用 var 声明它,以便您可以为其分配任何内容。然后你可以使用 .getClass() 方法来检查输入是否等于 num(声明为 int,因此只有当扫描也是 int 时才会为真)。

System.out.println("Write a number: ");
var x = scan.next();
if(x.getClass() == num.getClass()) {
    num = x
}
else {
    System.out.println("Wrong input...");
}

我稍微修正了你的代码版本,所以它现在可以与 chars/Strings 一起使用了。我尽量少修改。

public static void main(String[] args) {
    int num=0, option=0;
    String input;
    boolean keep=true;

    Scanner scan = new Scanner(System.in);

    while(keep) {
        System.out.println("1 - Test Exception.");
        System.out.println("2 - Out.");

        input = scan.next();
        
        try{
           option = Integer.parseInt(input);
        } 
        catch (NumberFormatException exception){
           System.out.println("Wrong input");
           continue;
        }

        switch(option) {

        case 1:
            System.out.println("Write a number: ");
            if(scan.hasNextInt()) {
                num = scan.nextInt();
            }
            else {
                System.out.println("Wrong input...");
            }
            break;
        case 2:
            keep=false;
            System.out.println("Bye !");
        }

    }

}

扫描仪现在正在使用 next() 函数,该函数返回下一个使用 enter 提交的输入字符。

在 try 块中,函数 Integer.parseInt(input) 检查给定的字符串是否为整数,否则抛出 NumberFormatException 并立即捕获。在这种情况下,continue 语句会跳过 while 循环中的以下代码并从头开始执行。

所以在 try-catch 块之后,您可以确定,该选项是一个整数并且 switch case 正在工作。