我试着查了一下,虽然其他人也问过这个问题,但他们的情况适用于不同的事情(据我所知)。
我正在学习Java,并且我正在创建一个与用户"对话"的程序,询问问题和其他东西。作为实际学习面向对象编程概念的第一步,我创建了一个类来帮助我的主要项目不被问题的处理所填充,而是将大多数问题的处理和返回放在一个名为ConversationHelper的类中。
我在我的ConversationHelper中创建了一个方法来询问Yes/No问题。下面是它的代码:
public boolean askYNQuestion(String question) {
Scanner input = new Scanner(System.in);
boolean isInputCorrect = false;
while(isInputCorrect == false) {
displayQuestion(question + " (Y or N)");
String readin = input.nextLine();
switch (readin.toLowerCase()) {
case "n":
return false;
break;
case "y":
return true;
break;
case "yes":
return true;
break;
case "no":
return false;
break;
case "false":
return false;
break;
case "true":
return true;
break;
default:
break;
}
}
System.out.println("THIS IS NOT SUPPOSED TO HAPPEN! FALSE DEFAULT!");
return false;
}
这个问题比其他任何事情都更令人烦恼。switch语句中的每个break都会出现"不可达代码",因为在它之前有一个return语句。然而,这是注定要发生的。
Netbeans现在告诉我,在构建时,"编译器运行错误。"这不仅很烦人,而且很难判断错误是已知的错误,还是需要我注意的另一个错误,浪费了我试图使程序工作的时间。
我正在寻找一种更好的方法来做到这一点,不会产生错误,或者一种方法来强制禁用此错误。我正在用Java 8运行Netbeans。如有任何帮助,我将不胜感激。
谢谢!
return
将充当break
。没有必要两者都用。如果您收到消息,您有不可访问的代码,那么它在那里没有意义,或者您之前所做的事情在逻辑上是无序的。
作为第二点,为了改进代码,可以在switch语句中组合条件。如果你有多个返回相同结果的项,你可以一个接一个地列出它们,并为它们都放一个单一的返回。
switch (readin.toLowerCase()) {
case "n":
case "no":
case "false":
return false;
case "y":
case "yes":
case "true":
return true;
default:
break;
}