2015-04-23 116 views
2

我想用switch語句製作一個簡單的菜單。但是我在與所述開關的問題:開關語句循環通過

public class main { 

    public static void main(String[] args) throws IOException { 

     printMenu(); 

    } 

    public static void printMenu() throws IOException{ 

    char selection = 0; 
    do{ 
     System.out.println("Choose option: "); 
     System.out.println("1. Option 1"); 
     System.out.println("2. Option 2"); 
     System.out.println("3. QUIT"); 
     System.out.println("\t\t\t"); 

     selection = (char)System.in.read(); 

     switch(selection){   
      case '1': 

        System.out.printf("opt1 chosen\n"); 

       break; 

      case '2': 

       System.out.printf("opt2 chosen\n"); 

       break;     

      case '3': 

       break; 

      } 
     } 
     while(selection != '3'); 

    } 
} 

出於某種原因,選擇一個或兩個的情況下,其結果是,打印菜單獲取打印兩次,這樣的:

程序輸出:

Choose option: 
1. opt1. 
2. opt2. 
3. opt3. 

1 
opt1 chosen 
Choose option: 
1. opt1. 
2. opt2. 
3. opt3. 

Choose option: 
1. opt1. 
2. opt2. 
3. opt3. 

問題是,是什麼原因導致了這個問題?

回答

9

當您按數字和<Enter>這是兩個字符不是一個。即你輸入

1\n 

這是不可避免的,但你可以選擇來解析輸入不同與掃描儀其不同的方式處理這個,或者你可以忽略它。 (或者你可以期望,用戶必須鍵入一個數字後\n ...

0

彼得Lawrey是正確

我建議使用掃描儀類:

public static void printMenu() throws IOException { 
    Scanner scanner = new Scanner(System.in); 
    int selection = 0; 
    do{ 
     System.out.println("Choose option: "); 
     System.out.println("1. Option 1"); 
     System.out.println("2. Option 2"); 
     System.out.println("3. QUIT"); 
     System.out.println("\t\t\t"); 

     selection = (char) scanner.nextInt(); 

     switch(selection){ 
     case 1: 

      System.out.printf("opt1 chosen\n"); 

      break; 

     case 2: 

      System.out.printf("opt2 chosen\n"); 

      break; 

     case 3: 

      break; 

     } 
     scanner.nextLine(); 

    } 
    while(selection != '3'); 

} 
+0

因爲選擇是你的迴應INT。 – Bhoot

1

正如彼得指出的那樣,問題出現了,因爲的方式,你正在閱讀的「選擇」輸入您可以按如下更正功能。「(!選擇= 3),而」

public class main { 

    public static void main(String[] args) throws IOException { 
     printMenu(); 
    } 

    public static void printMenu() throws IOException { 
     char selection = '0'; 
     while (selection != '3') { 
      if (selection != '\n') { 
       System.out.println("Choose option: "); 
       System.out.println("1. Option 1"); 
       System.out.println("2. Option 2"); 
       System.out.println("3. QUIT"); 
       System.out.println("\t\t\t"); 
      } 
      selection = (char) System.in.read(); 
      switch (selection) { 
       case '1': 
        System.out.printf("opt1 chosen\n"); 
        break; 
       case '2': 
        System.out.printf("opt2 chosen\n"); 
        break; 
       case '3': 
        break; 
       default: 
        break; 
      } 
     } 
    } 
}