【问题标题】:Nested if returning unreachable code如果返回无法访问的代码,则嵌套
【发布时间】:2016-01-24 17:59:27
【问题描述】:

我正在做一个(伪)AI问答界面,我的“答案”类是一堆if语句:如果消息中的“a”然后返回这个“b”。

我希望能够通过插入嵌套的 if 来赋予它更多的深度,但第二个 if 给出了“无法访问的代码”。我能做些什么来解决它?有没有更好的方法来做我正在尝试的事情?

主类:

System.out.println("Type your message:");
String message = talkback.beginAnswers(in.nextLine());

...

beginAnswers 类:

public String beginAnswers (String message) {

if("nothing".equalsIgnoreCase(message)) {
 return "Are you sure?";

     if("yes".equalsIgnoreCase(message)) {
       return "ok";
        }
   }

  ....

}

【问题讨论】:

    标签: java if-statement unreachable-code


    【解决方案1】:

    您收到错误是因为第一个 return 语句:

    return "Are you sure?";
    

    如果达到,将终止 beginAnswers() 方法的执行并将控制权返回给调用方方法。所以后面的代码:

    if("yes".equalsIgnoreCase(message)) {
        return "ok";
    }
    

    永远无法到达。

    作为一种解决方案,您可以将嵌套的 if 语句从第一个语句中取出:

    if("nothing".equalsIgnoreCase(message)) {
        return "Are you sure?";
    }
    else if("yes".equalsIgnoreCase(message)) {
        return "ok";
    }
    

    您还可以使用三元运算符在一行中加速整个过程,如果这两个条件都不是true,则返回null

    return "nothing".equalsIgnoreCase(message) ? "Are you sure?" : 
           "yes".equalsIgnoreCase(message) ? "ok" : null;
    /* if message == "nothing" return "Are you sure?"
       if message == "yes" return "ok"
       if message != "yes" AND message != "nothing" return null 
       P.S: '==' and '!=' are for demonstration only. Keep using the .equals() 
       method for matching strings */
    

    【讨论】:

    • 三元运算符看不懂,if语句在哪里?
    • 这是if-else-then 的简写。这就是它的工作原理。在此处查看其他示例以获取更多详细信息:java.about.com/od/t/g/ternaryoperator.htm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多