[英]Flow of handling exception
有誰知道為什么在輸出exception
之前控制台輸出又顯示菜單一次?
我除了輸出應該是:
1. item 1
2. item 2
3. Quit
Please choose a item:
WRONGINPUT <---- user input
Invalid input <---- where I want the exception shows
1. item 1
2. item 2
3. Quit
Please choose a item:
但是,我得到的是:
1. item 1
2. item 2
3. Quit
Please choose a item:
WRONGINPUT <---- user input
1. item 1
2. item 2
3. Quit
Please choose a item:
Invalid input <---- why the exception is shown here?
代碼如下所示:
// code omitted
Scanner scanner = new Scanner(System.in);
int mainMenu = -1;
do {
try {
System.out.println("1. item 1");
System.out.println("2. item 2");
System.out.println("3. Quit");
System.out.println("Please choose a item:");
mainMenu = scanner.nextInt();
} catch (InputMismatchException e) {
scanner.nextLine();
System.err.println("Invalid input");
}
if (mainMenu == 1)
// do something
else if (mainMenu == 2)
// do something
else if (mainMenu == 3)
System.out.println("Quitting...");
} while (mainMenu != 3);
這是答案。請運行此程序。
package java7.demo;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class Test {
public static void main(String args[]){
int mainMenu = -1;
Scanner scanner = new Scanner(System.in);
do {
try {
System.out.println("1. item 1");
System.out.println("2. item 2");
System.out.println("3. Quit");
System.out.println("Please choose a item:");
mainMenu = scanner.nextInt();
if (mainMenu == 1){
// do something
}
else if (mainMenu == 2){
}
// do something
else if (mainMenu == 3){
System.out.println("Quitting...");
}else{
throw new InputMismatchException();
}
} catch (InputMismatchException e) {
System.err.println("Invalid input");
scanner.nextLine();
}
} while (mainMenu != 3);
}
}
您只需要在err打印語句下更改scanner.nextLine()。
我的代碼在命令中運行時順序沒有錯。
我發現原因是System.err.println
在Eclipse中很重要。 當我將其更改為System.out.println
,我得到正確的輸出順序。 但是我認為沒有必要,因為這是Eclipse的問題。
這個鏈接給了我原因。 無論如何,謝謝您的幫助。 干杯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.