异常处理,捕获引起while循环停止的原因

我有一个文件需要读取,打印出整数,捕获异常并继续显示下一个整数,依此类推,直到不再有整数。

该文件包含:12 5 sd 67 4 cy

我希望它显示:

12

5

输入错误

67

4

输入错误

但是,它只给我12、5,后面是输入错误,然后停止。我尝试将所有内容放入while循环" title="while循环">while循环中,并且由于输入异常而无休止地循环。

public static void readNumbers()

{

File inputFile = new File ("C:/users/AC/Desktop/input.txt");

try

{

Scanner reader = new Scanner(inputFile);

while(reader.hasNext())

{

int num = reader.nextInt();

System.out.println("Number read: " +num);

}

}

catch (InputMismatchException e)

{

System.out.println("Input error ");

}

catch (FileNotFoundException e2)

{

System.out.println("File not found!");

}

}

}

我缺少什么,以便循环继续读取下一个int,依此类推?

回答:

try / catch块需要在循环内部。

当引发异常时,控制会尽可能地爆发,直到遇到遇到catch块的情况为止(在您的情况下,该catch块在循环之外)。

public static void readNumbers()

{

File inputFile = new File ("C:/users/AC/Desktop/input.txt");

try {

Scanner reader = new Scanner(inputFile);

while(reader.hasNext())

{

try

{

int num = reader.nextInt();

System.out.println("Number read: " +num);

}

catch (InputMismatchException e)

{

System.out.println("Input error ");

}

}

}

catch (FileNotFoundException e2)

{

System.out.println("File not found!");

}

}

我尝试将所有内容放入while循环中,并且由于输入异常而无休止地循环。

您提到您已经尝试过了。我需要您遇到的问题的更多详细信息,因为这是正确的方法。我的头顶上只是一个预感,也许是当发生异常时reader.nextInt()不会提高读者在文件中的位置,因此再次调用nextInt会读取相同的非整数块。

也许您的catch块需要调用reader.getSomethingElse?像reader.next()一样?

这是一个主意,我还没有测试过:

public static void readNumbers()

{

File inputFile = new File ("C:/users/AC/Desktop/input.txt");

try {

Scanner reader = new Scanner(inputFile);

while(reader.hasNext())

{

try

{

int num = reader.nextInt();

System.out.println("Number read: " +num);

}

catch (InputMismatchException e)

{

System.out.println("Input error ");

reader.next(); // THIS LINE IS NEW

}

}

}

catch (FileNotFoundException e2)

{

System.out.println("File not found!");

}

}

我对提升读者是正确的。

根据扫描仪的Java文档:

将输入的下一个标记扫描为int。如果下一个标记不能转换为有效的int值,则此方法将引发InputMismatchException,如下所述。

http://docs.oracle.com/javase/7/docs/api/

以上是 异常处理,捕获引起while循环停止的原因 的全部内容, 来源链接: utcz.com/qa/413059.html

回到顶部