[英]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.