Вложен, если возвращается недоступный код

Я делаю (псевдо) AI интерфейс вопросов и ответов, мой класс 'answer' представляет собой набор утверждений 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";
        }
   }

  ....

}

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";
}

Вы также можете увеличить все это в одну строку, используя троичный оператор, и вернуть null если ни одно из этих 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 */
Другие вопросы по тегам