我创建了一个catch子句的NoSuchElementException错误

时间:2011-10-02 02:44:06

标签: java

            int num_lines = 0;
            try {
                if (file_stream.hasNextInt()) //line 81
                {
                    num_lines = file_stream.nextInt();
                }
            } catch (NoSuchElementException e) {
                System.err.println("The input is not valid and cannot be processed.");                  
            }

即使我似乎已经在代码中解释了它,我仍然会收到此错误。在这个测试用例中,file_stream文件是空的,所以我想查看程序是否会捕获错误,显然它没有这样做:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at Program1.main(Program1.java:81)

2 个答案:

答案 0 :(得分:1)

当迭代没有更多元素时,如果NoSuchElementException类方法返回tokens,将抛出

Scanner异常。

来自JavaDoc

  

一个简单的文本扫描程序,可以解析基本类型和字符串   使用正则表达式。

     

扫描仪使用分隔符模式将其输入分解为标记,   默认情况下匹配空格。然后可以得到所产生的令牌   使用各种下一个转换为不同类型的值   方法

例如,

List<Integer> ints=new ArrayList<Integer>();
try
{
  int  value=ints.iterator().next();
}catch(NoSuchElementException ex)
 {
   System.out.println(ex);
 }  

答案 1 :(得分:0)

我认为您可能会在代码中查找错误的位置。除非您从该流中读取多个线程,否则在hasNextInt()返回true之后,您无法获得NoSuchElementException。