扫描仪输入不匹配
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
的价值。而且,我不记得有没有其他方法可以检查它是否是字符串。所以,对不起。
这是我的代码(简化版)。
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
的价值。而且,我不记得有没有其他方法可以检查它是否是字符串。所以,对不起。