java - 如果返回无法访问的代码则嵌套

标签 java if-statement unreachable-code

我正在做一个(伪)人工智能问题和答案界面,我的“答案”类是一堆 if 语句:如果消息中的“a”那么返回这个“b”。

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

主类:

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

...

开始答案类:

public String beginAnswers (String message) {

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

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

  ....

}

最佳答案

您收到错误是因为第一个 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 */

关于java - 如果返回无法访问的代码则嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34979340/

相关文章:

java - RepositoryRestMvcConfiguration 无法转换为 javax.servlet.Servlet

javascript for...in + if-test(在表单内的开关内部)

c - gcc 报告 "will never be executed"关于行 : while(fgets(line, MAX_LINE, stdin) != NULL)

c# - 这个开关盒怎么有无法访问的代码?

java - Jetty mysql 连接池配置错误 : javax. naming.NameNotFoundException;剩余名称'env/jdbc/---(mysql 5.0+jetty 7.0.1)

java - 替换 SQL 字符串中的时间戳占位符

java - Spring 启动 : How to disable Tomcat startup logging?

python - 为什么这个 python 逻辑语句的行为与我的预期行为相反?

php - 验证用户密码与数据库中的密码匹配

java - 为什么 Java 编译器不会为无法访问的 then 语句生成无法访问的语句错误?