Почему не появляется мое последнее сообщение JOptionPane? - PullRequest
0 голосов
/ 23 июня 2019
import javax.swing.JOptionPane;

public class Example {
    public static void main(String[] args) {
        String colour = JOptionPane.showInputDialog("What's your favourite colour?");
        int shade = Integer.parseInt(JOptionPane.showInputDialog("From a scale of 1-10, 10 being the darkest and 1 being the lightest, what shade do you like?"));
        String response = "";

        if (colour == "Red") { 
            if (shade < 5)
                response = "Light Red";
                else 
                    response = "Dark Red";
            JOptionPane.showMessageDialog(null, "Your colour is " + response);
        }
    }
}

Почему не появляется последнее сообщение JOptionPane? Например, пользователь вводит «красный», а затем «1», ответ не отображается как «светло-красный».

1 Ответ

1 голос
/ 23 июня 2019

Наиболее вероятное объяснение состоит в том, что ваш поток кода никогда не входит в родительский блок if, который показывает диалог сообщения. Как указано в комментарии к вашему вопросу, это, скорее всего, связано с тем, что вы сравниваете две строки, используя оператор == вместо метода equals(String). Прочитайте здесь для получения дополнительной информации о разнице между этими двумя способами сравнения строк.

Это краткое резюме ответа, связанного выше:

Метод equals () сравнивает «значение» внутри экземпляров String (в куче) независимо от того, ссылаются ли эти две ссылки на один и тот же экземпляр String.

Оператор "==" сравнивает значение двух ссылок на объекты, чтобы определить, ссылаются ли они на один и тот же экземпляр String.

Вот так должен выглядеть ваш код:

String response = "Unknown";

if (colour.equals("Red")) {
    response = shade < 5 ? "Light Red" : "Dark Red";
}
JOptionPane.showMessageDialog(null, "Your colour is " + response);

Обратите внимание, что я взял на себя некоторую свободу в сокращении присваивания нового значения полю response (поскольку это должно сделать его более компактным и читаемым) и переместил метод showMessageDialog за пределы блока if (как предложил @CarlosHeuberger), чтобы он отображал сообщение, даже если выбранный пользователем цвет не красный.

...