这是涉及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以获得正确的输入,以及在try / catch?
之后让switch语句看到userIn答案 0 :(得分:3)
int userIn
位于try-catch
范围内,您只能在不在外面的范围内使用它。
您必须在try-catch
括号外声明:
int userIn = 0;
try{
userIn = ....
}.....
答案 1 :(得分:1)
使用类似:
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块中设置它。
答案 2 :(得分:0)
尝试这样的事情
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
解析为数字