如果返回无法访问的代码则嵌套
Nested if returning unreachable code
我在做一个(伪)AI问答界面,我的'answer'class是一堆if语句:if"a" in message然后 return 这个"b".
我希望能够通过插入嵌套的 if 来赋予它更多的深度,但是第二个 if 给出了 "Unreachable code"。我能做些什么来解决它?有没有更好的方法来做我正在尝试的事情?
主要class:
System.out.println("Type your message:");
String message = talkback.beginAnswers(in.nextLine());
...
beginAnswers class:
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()
方法的执行和 return 对调用方方法的控制。所以后面的代码:
if("yes".equalsIgnoreCase(message)) {
return "ok";
}
永远达不到。
作为解决方案,您可以将嵌套的 if
语句从第一个语句中取出:
if("nothing".equalsIgnoreCase(message)) {
return "Are you sure?";
}
else if("yes".equalsIgnoreCase(message)) {
return "ok";
}
您还可以使用 三元运算符 和 return null
if none 2个条件是true
:
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 */
我在做一个(伪)AI问答界面,我的'answer'class是一堆if语句:if"a" in message然后 return 这个"b".
我希望能够通过插入嵌套的 if 来赋予它更多的深度,但是第二个 if 给出了 "Unreachable code"。我能做些什么来解决它?有没有更好的方法来做我正在尝试的事情?
主要class:
System.out.println("Type your message:");
String message = talkback.beginAnswers(in.nextLine());
...
beginAnswers class:
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()
方法的执行和 return 对调用方方法的控制。所以后面的代码:
if("yes".equalsIgnoreCase(message)) {
return "ok";
}
永远达不到。
作为解决方案,您可以将嵌套的 if
语句从第一个语句中取出:
if("nothing".equalsIgnoreCase(message)) {
return "Are you sure?";
}
else if("yes".equalsIgnoreCase(message)) {
return "ok";
}
您还可以使用 三元运算符 和 return null
if none 2个条件是true
:
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 */