2015-11-04 56 views
-1

Sup,everyone。我在Java中遇到了開關/外殼菜單的問題。Java中的開關/殼體控制檯菜單

class ConsoleMenu{ 
    ConsoleMenu(){ 
    } 
    void ShowMenu(){ 
     System.out.println(1); 
     System.out.println(2); 
     System.out.println(3); 
    } 
} 
public class Main { 
    public static void main(String[] args) throws java.io.IOException { 
     ConsoleMenu cs = new ConsoleMenu(); 
     char ch; 
     do { 
      cs.ShowMenu(); 
      ch = (char) System.in.read(); 
      switch (ch) { 
       case '1':{ 
        System.out.println("228"); 
        break;} 
       case '2':{ 
        System.out.println("556"); 
        break;} 
      } 
     } while (ch != '0'); 
    } 
} 

當我做出的選擇,它類似的東西:

1 
2 
1 
228 
1 
2 
1 
2 
2 
556 
1 
2 
1 
2 

,所以我不能,爲什麼已瞭解Java的完成情況後,顯示我的菜單兩次。有什麼建議麼?

+0

您顯示的代碼不是您正在運行的代碼 - 按照書面,您的ShowMenu方法將打印3行。但是你的問題是,當你輸入一個值時,你不會照顧你得到的換行符。您輸入1後跟回車。所以通過循環第二次讀取第一次輸入結束時的換行符。 – FredK

回答

1

該行按ENTER鍵時

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

一個簡單的解決辦法是做另一個讀取和丟棄的結果讀取每次鍵入包括新線'\n'字符。例如。

do { 
     cs.ShowMenu(); 
     ch = (char) System.in.read(); 
     switch (ch) { 
     case '1': { 
      System.out.println("228"); 
      break; 
     } 
     case '2': { 
      System.out.println("556"); 
      break; 
     } 
     } 
     System.in.read(); 
    } while (ch != '0'); 
+0

謝謝你的建議! – genesi5