扫描仪输入不匹配

Scanner inputMismatch

这是我的代码(简化版)。

public class A {

    int num;
    
    public void method () {
        
        Scanner scanner = new Scanner(System.in);
        num = scanner.nextInt();
        
        switch (num) {      
        case 1:         
            System.out.println("Hello 1");
            scanner.close();
            break;          
        case 2:         
            System.out.println("Hello 2");
            scanner.close();
            break;      
        case 3:
            System.out.println("Hello 3");
            scanner.close();
            break;
            
        default:
            System.out.println("\nPlease try again.");
            method();
        }
    }
}

我希望像字符串这样的任何非整数输入也 运行 默认大小写和系统输出“请重试”而不是出现输入不匹配错误,但我不知道该怎么做。

基本上任何不是 1,2 或 3 的输入都应该跳转到默认大小写。

使用 scanner.hasNextInt() 检查输入是否为整数。如果不是,则将零分配给 num,然后匹配默认值。

您不能通过此代码执行此操作,因为您将用户输入作为整数,如果您输入字符串,它将通过 inputMismatch 错误,因为编译器期望整数但得到字符串或字符输入。

现在您可以做的是将字符串作为用户输入。这里有完整的代码:

public class A {

String num;

public void method () {
    
    Scanner scanner = new Scanner(System.in);
    num = scanner.nextLine();
    
    switch (num) {
    
    case "1":
        
        System.out.println("Hello 1");
        scanner.close();
        break;
        
    case "2":
        
        System.out.println("Hello 2");
        scanner.close();
        break;
    
    case "3":

        System.out.println("Hello 3");
        scanner.close();
        break;
        
    default:

        System.out.println("\nPlease try again.");
        method();
}
}
}

这就是你想要的。它适用于每个输入。

您无法通过 num = scanner.nextInt(); 获取字符串。不过,我有个想法。

value = scanner.nextLine();
//Now, check it is string or int
boolean numeric = true;

    try {
        Double num = Double.parseDouble(value);
    } catch (NumberFormatException e) {
        numeric = false;
    }

if(numeric){
   Integer.parseInt(value)
}else{
   //you can write value= value. Or, you can left it empty also. Or, you can remove else statement also.
}

switch (num) {      
    case 1:         
        System.out.println("Hello 1");
        scanner.close();
        break;          
    case 2:         
        System.out.println("Hello 2");
        scanner.close();
        break;      
    case 3:
        System.out.println("Hello 3");
        scanner.close();
        break;
    case "Hello":
        System.out.println("Hello 3");
        scanner.close();
        break;
        
    default:
        System.out.println("\nPlease try again.");
        method();
    }

@Badal 也对。而且,我这样做是为了保持 int 的价值。而且,我不记得有没有其他方法可以检查它是否是字符串。所以,对不起。