尝试捕获和用户输入

问题描述 投票:0回答:3

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

java switch-statement try-catch
3个回答
3
投票

int userIn
位于
try-catch
范围内,只能在范围内使用,不能在范围外使用。

您必须在

try-catch
括号外声明:

int userIn = 0;
try{

userIn = ....
}.....

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 块中设置布尔标志。


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

© www.soinside.com 2019 - 2024. All rights reserved.