0

我试图用Scanner预期输入一个InputMismatchException,如果输入等于“c”或“q”我想运行catch块中的一些特定代码。我想知道是否有办法在引发异常之后获取用户输入的值。因此,例如,如果代码调用double并且用户输入字母“c”,我希望能够知道特别是“c”被输入,并且如果为true,则执行某些操作。下面是我尝试写的代码,其中“的getValue()”是一个虚构的方法名称来形容我试图做到:Java:获取抛出异常的用户输入的值

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"); 
    } 
} 

预先感谢您的输入:)

+1

检查出Double.parseDouble()函数,你将使用Scanner.next()或Scanner.nextLine(); – EyeOfTheHawks

回答

2

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

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 

     } 
    } 
+0

我完全忘了hasNext方法,它们正是我所需要的。 +1 所以,现在我知道这一点,我想知道,是否有任何理由需要尝试/捕捉用户输入,或者Scanner类是否有几乎所有需要防止输入异常的方法? – Justin

+0

如果扫描器对每一个next()都有一个匹配的hasNext()方法 - 我没有验证过这一点,但看起来一目了然 - 您可以在每次下一个()调用之前预先检查输入。但是这可能是非常昂贵的,有些情况下Scanner像扫描非常大的文件必须符合规范,使用异常终止与先发制人检查可以提供更好的性能。 – lreeder

-1

你应该在输入中读入字符串,然后进行转换。

+1

应该是一个评论。 – alfasin