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;    }

另一个问题是,是否有更合适的方法来实现“退出”选项,而不是在输入“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 中有两种常见的支撑样式 - 我在上面的代码中显示的一种,以及“同时在单独的一行上的支撑”缩进作为右大括号”版本。为了其他可能阅读您的代码的人,可能值得采用其中一种常见的样式。)

于 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 做任何事情。你需要做一些类似的事情:

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

或者您应该在 showHelp 中显示该消息。

于 2012-09-11T14:46:12.580 回答