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”,则响应未显示为“浅红色”。
答案 0 :(得分:1)
最可能的解释是您的代码流从未进入显示消息对话框的父if
块。正如您对问题的评论所述,这很可能是由于您正在使用==
运算符而不是equals(String)
方法比较两个字符串。阅读here,了解有关这两种比较字符串的方式之间的区别的更多信息。
这是上面链接的答案的简短摘要:
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所建议的),以便即使用户选择的颜色不是红色时也提供一条消息。