0

メニュー インターフェイスとして使用するために Switch ステートメントを使用しようとしています。シンボル。

しかし、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;    }

もう 1 つの質問ですが、「x」が入力された後に単に中断するのではなく、「終了」オプションを実装するためのより適切な方法はありますか?

私の質問を読んでくれてありがとう。

4

3 に答える 3

7

Java 言語内の疑問符文字について特別なことは何もありません。エスケープする必要はありません。正規表現とは異なります。使用するだけです:

case '?': showHelp(); break;

エスケープする必要がある文字(および使用可能なエスケープ シーケンス)については、 JLS セクション 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 には 2 つの一般的なブレース スタイルがあります - 上記のコードで示したものと、同じ行の別の行にある "ブレース"あなたのコードを読むかもしれない他の人のために、これらの一般的なスタイルの1つを採用する価値があるでしょう.)

于 2012-09-11T14:39:16.993 に答える
4

をエスケープする必要はありません?

case '?': showHelp(); break;

「x」が入力された後に単に休憩するのではなく、「終了」オプションを実装するためのより適切な方法はありますか?

それは問題ありませんが、削除しても同じように機能します。おそらくより理にかなっているのは、次のようなものです。

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

したがって、ユーザーが許可されていない文字を入力した場合は、ユーザーに知らせます。

于 2012-09-11T14:39:09.660 に答える
2

「?」をエスケープする必要はありません。チャーで。また、現在、構築して showHelp() から返す文字列で何もしていません。次のようなことをする必要があります。

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

または、showHelp 内にメッセージを表示する必要があります。

于 2012-09-11T14:46:12.580 に答える