繁体   English   中英

在 Java 中使用 switch 语句无法访问的代码

[英]Unreachable code using switch statements in Java

所以我正在构建一个电子邮件管理应用程序,虽然它正在使用 if 语句,但我正在尝试合并 switch 语句。 我正在提示用户使用扫描仪选择他们来自哪个部门,同时建立与其关联的电子邮件。 虽然当我试图返回 this.department 时,它说它无法访问。 我觉得我错过了一些非常明显的东西。

// Ask for the department
private String setDepartment() {
    Scanner sc = new Scanner(System.in);
    int department;
    
    System.out.println("Select your department:\n1. Sales\n2.Accounting\n3.Development\n4.N/A");
    department = sc.nextInt();
    
    while (true) {
        switch (department) {
            case 1:
                this.department = "Sales";
                break;
            case 2:
                this.department = "Accounting";
                break;
            case 3:
                this.department = "Development";
                break;
            case 4:
                this.department = "";
                break;
            default:
                System.out.println("Please choose a valid option (1-4)");
                break;
        }
        sc.close();
    }
    return this.department; <-- Error: Unreachable code
}

问题是您在 while()循环中的条件。 它始终设置为 true 所以while循环下面的代码永远不会被执行。尝试在while循环内有一个不同的条件,它以某个值终止。否则你需要将你想要返回的内容放在while循环内。

额外:请同时放置您的sc.close(); 在 while 循环之外,否则在第一个 while 循环迭代之后您不能使用资源。因此必须始终在最后完成关闭资源。

解决方案1:

while(updatedTerminationCondition){//change the termination condition





}

解决方案2:

while(true){




//place your return value inside here but then loop will only run once  
}

问题是您的switch语句处于永远不会退出的while(true)循环中。 除非您明确退出循环,例如使用break程序将永远不会停止执行循环,这意味着永远不会到达它下面的任何代码,这就是编译器所抱怨的。

可以重写此代码以摆脱类成员的无限循环和冗余的局部变量同名:

private String setDepartment() {
    Scanner sc = new Scanner(System.in);
    System.out.println("Select your department:\n1. Sales\n2. Accounting\n3. Development\n4. N/A");
        
    while (null == this.department) {
        switch(sc.nextInt()) {
            case 1:
                this.department = "Sales";
                break;
            case 2:
                this.department = "Accounting";
                break;
            case 3:
                this.department = "Development";
                break;
            case 4:
                this.department = "";
                break;
            default:
                System.out.println("Please choose a valid option (1-4)");
                break;
        }
    }
    return this.department;
}

更新
如果使用标准输入System.in也不必关闭Scanner (感谢@rzwitserloot指出)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM