0

这是一个涉及 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?

4

3 回答 3

3

int userIn是在作用try-catch域内,只能在作用域内使用,不能在作用域外使用。

您必须在try-catch括号外声明它:

int userIn = 0;
try{

userIn = ....
}.....
于 2013-09-06T23:34:56.510 回答
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 块中设置。

于 2013-09-06T23:32:20.400 回答
1

尝试这样的事情

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为数字

于 2013-09-06T23:35:07.963 回答