2012-09-11 16 views
0

我正在嘗試使用一個Switch語句作爲菜單界面,我想知道如何包含一個「幫助」選項,這是由用戶輸入'?'觸發的。符號。如何在'char'類型的開關中實現特殊字符(?)作爲選項?

但是由於Switch正在接受'char'類型,我不確定這是如何實現的。

請你指點我正確的方向?

這是到目前爲止我的非編譯代碼:其他

private char readChoice() 
{ System.out.print("Choice (a/b/c/s/?/x): "); 
    return In.nextLine().toLowerCase().charAt(0); } 

private void execute(char choice) 
{ switch (choice) 
    { case 'a': routes.show(); break; 
     case 'b': customers.book(routes); break; 
     case 'c': customers.show(); break; 
     case 's': routes.showSchedule(); break; 
     case '\?': showHelp(); break; 
     case 'x': break; }} 

private String showHelp() 
{ String helpText = " A/a Show bookings by route\n"; 
    helpText +=  " B/b Book a trip\n"; 
    helpText +=  " C/c Show bookings by customer\n"; 
    helpText +=  " ? Show choices\n"; 
    helpText +=  " X/x Exit\n"; 
    return helpText; } 

一個問題,有沒有實現「退出」的選擇,而不是後一個「x」只是有一個休息一個更合適的方式是輸入?

感謝您花時間閱讀我的問題。

+0

與你的問題無關,只是你應該知道的。首先:使用'java.lang.StringBuilder'連接多個字符串,它比使用'+ ='更高效。其次:在這個例子中,不需要進行連接,只需將整個事件作爲一個字符串文字輸入即可。 –

回答

7

Java語言中的問號字符沒有什麼特別之處。你不需要逃避它 - 它不像一個正則表達式。只需使用:

case '?': showHelp(); break; 

需要逃脫字符(和可用的轉義序列)查看JLS section 3.10.4

編輯:根據意見,問題是與showHelp()方法,它建立一個字符串,但不會返回它。你可能想要類似的東西:

private String showHelp() { 
    out.println(" A/a Show bookings by route"); 
    out.println(" B/b Book a trip"); 
    out.println(" C/c Show bookings by customer"); 
    out.println(" ? Show choices"); 
    out.println(" X/x Exit"); 
} 

...適合值爲out。 (另外,你的支撐風格很奇怪,我認爲它很難閱讀。在Java中有兩種常見的支撐樣式 - 我在上面的代碼中顯示的樣式,以及「在單獨的支撐上與其他人的代碼一樣,可能值得采用其中一種常用風格。)

+0

感謝您的及時迴應。我確實嘗試過,編譯完成,儘管無論什麼原因,當我測試它時,在輸入'?'後,幫助腳本沒有打印。你能看到任何明顯的原因,這是事實嗎? – AlexM

+5

@AlexM它不打印,因爲創建幫助腳本的方法只是將其作爲字符串返回,並且不使用返回的字符串。 – Baz

+0

我非常同意對支具風格的評論。我只是試圖遵循我的講師在提供給我們的基本代碼中使用的樣式,因爲他更喜歡這種最小線方法。將來我會堅持使用單獨的版本。 – AlexM

4

沒有必要逃避一個字符的?

case '?': showHelp(); break; 

在那裏實施「退出」的選擇,而不是僅僅有後一個「x」休息一個更合適的方式是輸入?

它如果很好,但它會以同樣的方式,如果你刪除它。什麼可能會更有意義會是這樣的:

case 'x': break; 
default: showErrorMessage(); 

所以,如果用戶輸入未經授權的字符,你讓他知道。

+0

謝謝,這非常有幫助。 – AlexM

2

您不需要轉義'?'在字符中。另外 - 你沒有對你構造的字符串做任何事情,並且從showHelp()當前返回。您需要採取以下操作:

String message; 
switch(choice) { 
//.. stuff ommitted 
case '?': message = showHelp(); break; 

或者您應該在showHelp中顯示消息。

+0

謝謝 - 如果我要使用: case'?':System.out.println(showHelp());打破; – AlexM

+0

是的 - 這將工作,可能更好 –

相關問題