【问题标题】:Switch statement prematurely closingSwitch 语句过早关闭
【发布时间】:2021-04-14 19:31:41
【问题描述】:

我目前正在为大学课程做一个项目,但我遇到了 switch 语句过早结束的问题。我似乎无法弄清楚我做错了什么。

它应该接受用户的输入,如果不是其中一种情况,请重新启动 switch 语句。但是,只要输入了一个无效字符,switch 语句就会完全关闭并结束程序。

我目前已将其设置为在输入正确的情况下打印出每个代码,但是,

public static void companyClassificationCode() {
    char companyCode;

    System.out.print("Please enter your company classification code: ");
    companyCode = console.next().charAt(0);
    switch (companyCode) {
        case 'c':
        case 'C':
            System.out.println("C");
            companyCode = 'C';
            break;
        case 'l':
        case 'L':
            System.out.println("L");
            companyCode = 'L';
            break;
        case 'n':
        case 'N':
            System.out.println("N");
            companyCode = 'N';
            break;
        case 's':
        case 'S':
            System.out.println("S");
            companyCode = 'S';
            break;
        default:
            System.out.print("An invalid code has been entered. Please enter your company classification code: ");

    }
}

【问题讨论】:

  • 您目前还没有编写任何代码来“重新启动 switch 语句”。您要么需要将所有内容包装在一个循环中,要么在某些情况下实际上可以再次调用companyClassificationCode

标签: java switch-statement


【解决方案1】:

您可能希望将switch 语句包装在一个循环中。 以下代码将循环,直到输入有效代码;无效值恢复为初始值(单个空格字符)并重新开始循环。

    public static void companyClassificationCode() {
        char companyCode = ' ';

        while (companyCode == ' ') {
            System.out.print("Please enter your company classification code: ");
            companyCode = console.next().charAt(0);
            switch (companyCode) {
                case 'c':
                case 'C':
                    System.out.println("C");
                    companyCode = 'C';
                    break;
                case 'l':
                case 'L':
                    System.out.println("L");
                    companyCode = 'L';
                    break;
                case 'n':
                case 'N':
                    System.out.println("N");
                    companyCode = 'N';
                    break;
                case 's':
                case 'S':
                    System.out.println("S");
                    companyCode = 'S';
                    break;
                default:
                    System.out.print("An invalid code has been entered. Please enter your company classification code: ");
                    companyCode = ' ';
            }
        }
    }

【讨论】:

  • IntelliJ 说如果我在您建议的地方运行 while 循环,则 char companyCode 未初始化。
  • while (companyCode == ' ') { ... } 不会在用户输入无效字符时保持循环。如果用户输入“A”,则循环将停止执行。一个简单的解决方法就是在 default 的情况下分配 companyCode = ' ';
  • 使用do { … } while(…); 循环,您不需要预先初始化companyCode。例如char companyCode; do {System.out.print("Please enter your company classification code: "); companyCode = Character.toUpperCase(console.next().charAt(0)); } while("CNLS".indexOf(companyCode) == -1);