2010-01-27 123 views
2

所以我试图处理进入双用户可能是个例外,当我的扫描仪是期待整体输入:在Java中使用.nextInt()时如何处理double的意外输入?

boolean go = true; 
do { 
     System.out.print("Please enter one grade from 0 - 100. To end input, enter a   
     negative integral value.\n"); 
    try { 
      int myInt = scanner.nextInt(); 
      . 
      . 
      . 
    } 
    catch (InputMismatchException e) { 
      System.out.println("Oops!! Please enter only integral numbers"); 
    } 
while (go); 

这适用于非数字输入(即一个字母),但如果我输入3.14或另一个ASCII符号 - 例如 - 。在这种情况下,下面的行重复,直到我杀了程序。

Please enter one grade from 0 - 100. To end input, enter a negative integral value. 
Oops!! Please enter only integral numbers. 

任何想法? :d

回复:我使用System.in和Java 6

+1

你能比“我的代码爆炸”更精确吗? – 2010-01-27 00:41:54

+1

你的意思是“爆炸”是什么意思?你是否再次遇到异常? – Dmitry 2010-01-27 00:42:18

+0

如果用户在'scanner.nextInt();'和'InputMismatchException'处输入'double'确实会被抛出。你确定你没有在你的代码中做其他事吗?如果不是,读取的值是多少,它是输入的double的舍入版本? – bguiz 2010-01-27 01:02:26

回答

4

我猜想,当你说爆炸,你的意思是,你得到的

Oops!! Please enter only integral numbers 

一个无限循环,尝试这样做,而不是执行以下操作:

try { 
    int myInt = scanner.nextInt(); 
    // … 
} 
catch (InputMismatchException e) { 
    System.out.println("Oops!! Please enter only integral numbers"); 
    System.out.println(scanner.next() + " was not valid input."); 
} 

编辑:我看到我的初步猜测是正确的;-)

发生这种情况的原因是,当nextInt()失败时,内部指针不移动,所以每次你可以再次下一次,它都会失败。所以,你需要首先清除令牌,这是我通过打印出无效输入文本所做的事情。这会导致从输入流中读取新的令牌。

+1

+1:令牌指针未移动 – bguiz 2010-01-27 01:05:20

2

我想你在上面发布的代码(使用System.in的InputStream),和双打引起InputMismatchException预期。你使用什么输入法,以及什么版本的Java?

相关问题