这是一个涉及 try/catch 块的家庭作业问题。对于 try/catch,我知道您将要测试的代码放在 try 块中,然后将要响应异常而发生的代码放在 catch 块中,但在这种特殊情况下我如何使用它?
用户输入一个存储在 userIn 中的数字,但如果他输入字母或数字以外的任何内容,我想捕获它。用户输入的数字将在 try/catch 之后的 switch 语句中使用。
Scanner in = new Scanner(System.in);
try{
int userIn = in.nextInt();
}
catch (InputMismatchException a){
System.out.print("Problem");
}
switch(userIn){...
当我尝试编译时,对于与 switch 语句 switch(userIn){ 开头对应的行号,它返回符号未找到。经过几次搜索后,我发现在 try 块之外看不到 userIn,这可能导致错误。如何测试 userIn 的输入是否正确以及让 switch 语句在 try/catch 之后看到 userIn ?
int userIn
位于try-catch
范围内,只能在范围内使用,不能在范围外使用。
您必须在
try-catch
括号外声明:
int userIn = 0;
try{
userIn = ....
}.....
使用类似:
Scanner in = new Scanner(System.in);
int userIn = -1;
try {
userIn = in.nextInt();
}
catch (InputMismatchException a) {
System.out.print("Problem");
}
switch(userIn){
case -1:
//You didn't have a valid input
break;
通过将类似
-1
的内容作为默认值(它可以是在正常运行中不会收到的任何输入),您可以检查是否有异常。如果所有整数都有效,则使用您可以在 try-catch 块中设置布尔标志。
尝试这样的事情
int userIn = x; // where x could be some value that you're expecting the user will not enter it, you could Integer.MAX_VALUE
try{
userIn = Integer.parseInt(in.next());
}
catch (NumberFormatException a){
System.out.print("Problem");
}
如果用户输入的不是数字,这将导致异常,因为它会尝试将用户输入
String
解析为数字