尝试捕获和用户输入

时间:2013-09-06 23:29:26

标签: java switch-statement try-catch

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

3 个答案:

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