【发布时间】:2014-07-30 23:44:25
【问题描述】:
我试过查这个,虽然其他人问过这个,但他们的情况适用于不同的事情(据我所知)。
我正在学习 Java,并且正在创建一个与用户“对话”、提出问题和其他内容的程序。作为实际学习面向对象编程概念的一个步骤,我创建了一个类来帮助我的主要项目不处理问题,而是将大多数问题的处理和返回放在一个名为 ConversationHelper 的类中。
我在我的 ConversationHelper 中创建了一个方法来询问是/否问题。这是它的代码:
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 语句中的每个中断都会出现“无法访问的代码”,因为在它之前有一个 return 语句。然而,这是注定要发生的。
Netbeans 现在在构建时告诉我“编译器运行时出错”。这不仅很烦人,而且很难判断错误是这个已知错误,还是需要我注意的另一个错误,在我试图让我的程序工作时浪费时间。
我正在寻找一种不会产生错误的更好的方法来执行此操作,或者是一种强制禁用此错误出现的方法。我正在使用 Java 8 运行 Netbeans。任何帮助将不胜感激。
谢谢!
【问题讨论】:
-
同样,我已经验证该程序仍然可以运行。它并没有阻止我运行它,但它会产生烦恼并使其更难调试。
-
为什么必须在
return之后保留break?我想不出你需要这个的任何理由,通过删除它们,你可以解决你的问题。此外,您可以利用 switch 语句“失败”(我认为这是术语)这一事实来简化代码 -
@Takendarkk Return 语句返回,如果这种情况被触发。 return 语句会自动充当 break 语句吗?如果没有,我仍然需要它们来保持 switch 语句的功能(因为编译器会寻找它来结束案例并继续下一个)。
-
退货将起到休息的作用。就我的“失败”声明而言,尝试类似
case "n": case "no": case "false": return false; -
一般来说,在 Netbeans 等广泛使用的 IDE 上的默认警告是合适的,除非/直到您正在做一些非常高级的事情或维护存在问题的现有代码。编写新代码时,目标是使其编译时没有错误或警告,而不是射击信使。