【问题标题】:Unreachable Code - Placing a break after a return in switch statement无法访问的代码 - 在 switch 语句中的 return 后放置一个中断
【发布时间】: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 上的默认警告是合适的,除非/直到您正在做一些非常高级的事情或维护存在问题的现有代码。编写新代码时,目标是使其编译时没有错误或警告,而不是射击信使。

标签: java netbeans methods


【解决方案1】:

return 将充当break。没有必要同时使用两者。如果您收到消息说您有无法访问的代码,那么它的存在没有意义,或者您之前所做的某些事情在逻辑上是错误的。

第二点,为了改进代码,您可以在 switch 语句中组合条件。如果您有多个商品将返回相同的东西,您可以将它们一个接一个地列出,并为它们全部放置一个退货。

 switch (readin.toLowerCase()) {
    case "n":
    case "no":
    case "false":
        return false;
    case "y":
    case "yes":
    case "true":
        return true;
    default:
        break;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2012-02-04
    • 2020-07-14
    • 2013-07-31
    相关资源
    最近更新 更多