0

我试图用 Scanner 捕获一个 InputMismatchException 期望双精度,如果输入等于“c”或“q”,我想在 catch 块中运行一些特定的代码。我想知道是否有办法在抛出异常后获取用户输入的值。因此,例如,如果代码需要双精度并且用户输入字母“c”,我希望能够知道具体输入了“c”,如果为真,则执行某些操作。这是我正在尝试编写的代码,其中“getValue()”是一个虚构的方法名称,用于描述我要完成的工作:

double value = 0.0;

try{
    System.out.print("\nEnter a number: ");
    value = input.nextDouble();
}
catch(InputMismatchException notADouble){
    if(notADouble.getValue().equalsIgnoreCase("c")){
        //run the specific code for "c"
    }
    else if(notADouble.getValue().equalsIgnoreCase("q")){
        //run the specific code for "q"
    }
    else{
        System.out.print("\nInvalid Input");
    }
}

提前感谢您的输入:)

4

2 回答 2

2

用于Scanner.hasNextDouble()在 Scanner 尝试将其转换为数字之前验证输入。像这样的东西应该工作:

  double value = 0.0;

  Scanner input = new Scanner(System.in);

     System.out.print("\nEnter a number: ");
     while(input.hasNext())
     {
        while(input.hasNextDouble())
        {
           value = input.nextDouble();
        }

        String next = input.next();

        if("c".equals(next))
        {
           //do something
        }
        else if("q".equals(next))
        {
           //do something
        }
        else
        {
           System.out.print("\nInvalid Input");
           //return or throw exception

        }
     }
于 2013-10-19T17:09:22.573 回答
-1

您应该将输入作为字符串读取,然后进行转换。

于 2013-10-19T17:08:14.880 回答