Хотите создать оператор if, за которым следуют несколько операторов else-if и, наконец, оператор else "capture-all" - PullRequest
1 голос
/ 12 марта 2019

Создание «пиратского диалога» с возможностью выбора левой или правой руки.Однако я хочу, чтобы он отвечал положительно на разные варианты написания «влево» и «вправо» (как вы увидите в коде), когда я добавляю окончательный код «еще» для всех входных данных, которые не являются «правыми» или «левыми», это дает мне «java.lang.Error», недоступный код.Я протестировал свой код перед тем, как добавить последний оператор "else", и он работает так, как я хочу, добавил оператор "else" еще раз и выдает ту же ошибку.

(я также был бы признателен за советыи отзывы о том, как улучшить мой код, это второй проект, который я когда-либо создавал сам)

В любом случае, вот код:

package myOwn;

import java.util.Scanner;

public class myArms {

static Scanner sc2 = new Scanner(System.in);

public static void main(String[] args) {
    armInput();
}

public static void armInput() {
    System.out.println("Behold the arms! Which hand holds the secret item?");
    String answer = sc2.nextLine();
    System.out.println(armOpener(answer));
}

public static String armOpener(String answer) {
    if(answer.equals("left")) {
        return "Aha! Indeed the gemstone was hidden in the left hand. Now...";
    }else if(answer.equals("Left")) {
        return "Aha! Indeed the gemstone was hidden in the left hand. Now...";
    }else if(answer.equals("LEFT")) {
        return "Aha! Indeed the gemstone was hidden in the left hand. Now...";
    }else if(answer.equals("right")) {
        return "Bummer! The treasure was in the other hand. Easy for me to say, huh? What if there wasn't a treasure from the start of? Who knows...";
    }else if(answer.equals("Right")) {
        return "Bummer! The treasure was in the other hand. Easy for me to say, huh? What if there wasn't a treasure from the start of? Who knows...";
    }else if(answer.equals("RIGHT")) {
        return "Bummer! The treasure was in the other hand. Easy for me to say, huh? What if there wasn't a treasure from the start of? Who knows...";
    }else {
        return "Did you not hear me boy? I'm asking you, which hand?!";
    }
    return answer;
}

}

Строка «ответ ответа»;тот, который заканчивается красным подчеркиванием.Красное подчеркивание исчезнет, ​​если я уберу последнее "остальное" заявление.

1 Ответ

1 голос
/ 12 марта 2019

Это потому, что после всех ваших операторов if у вас есть оператор return, который никогда не будет выполнен, поскольку, если ни один из операторов if не совпадает, он перейдет к оператору else и завершится там. .

Вы можете удалить строку return или окончательную else в зависимости от ожидаемого возвращаемого значения, если не выполнено ни одно из условий.

...
public static String armOpener(String answer) {
    String ans = answer.toLowerCase();

    if (ans.equals("left")) {
        return "Aha! Indeed the gemstone was hidden in the left hand. Now...";
    } else if (ans.equals("right")) {
        return "Bummer! The treasure was in the other hand. Easy for me to say, huh? What if there wasn't a treasure from the start of? Who knows...";
    }

    return "Did you not hear me boy? I'm asking you, which hand?!";
}
...

Кроме того, похоже, что вы возвращаете одно и то же значение для разных буквенных символов слов (right и RIGHT), которые можно обработать в одном выражении путем сравнения значения переменной в нижнем регистре. Затем, когда у вас есть несколько if, как это, вы можете упростить это, используя оператор switch:

...
public static String armOpener(String answer) {
    switch(answer.toLowerCase()) {
        case "left":
            return "Aha! Indeed the gemstone was hidden in the left hand. Now...";

        case "right":
            return "Bummer! The treasure was in the other hand. Easy for me to say, huh? What if there wasn't a treasure from the start of? Who knows...";

        default:
            return "Did you not hear me boy? I'm asking you, which hand?!";
    }
}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...