如果... Else + JOption,为什么我的JOptionPanes没有显示?

时间:2017-05-10 18:49:42

标签: if-statement joptionpane

问题: 所以第一个窗口会显示它是什么日子。我键入当天,弹出的唯一内容是错误消息,告诉我检查我的拼写和标点符号。为什么窗户上没有当天的实际汤?

// *********** *********

公共课IfSoupDay {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {


    String day = JOptionPane.showInputDialog(null,"I am going to tell you"
            + " what the soup of the day is."+ "\n"
            + "\n"+"What day of the week is it?");


 if (day == "Monday")   
JOptionPane.showMessageDialog(null, "The soup of the day is Lobster Soup");


 else if(day == "Tuesday")
     JOptionPane.showMessageDialog(null,"The soup of the day is Potato Soup");

 else if (day == "Wednesday")
     JOptionPane.showMessageDialog(null, "The soup of the day is Chicken Noodle Soup");

 else if (day == "Thursday")
     JOptionPane.showMessageDialog(null, "The soup of the day is Goat Soup");

 else if (day == "Friday")
     JOptionPane.showMessageDialog(null,"The soup of the day is Booty Chunks");

 else if (day == "Saturday" || day == "Sunday")
     JOptionPane.showMessageDialog(null, "Sorry we are closed", "Closed",
             JOptionPane.ERROR_MESSAGE);

     else
     JOptionPane.showMessageDialog(null,"Be sure to check spelling and punctuation "
             + "such as capitals", "Sorry, not a day", JOptionPane.ERROR_MESSAGE);


}//end main

}

2 个答案:

答案 0 :(得分:1)

您正在将字符串文字与参考进行比较。

使用day.equals("Monday")代替day == "Monday"

这是使用Java实现字符串的结果,因为它比较了代码中字符串文字的哈希码,这些代码不相同。

例如,拿两个字符串:

String lol  = "lol";
String lol2 = "lol";

System.out.println( (lol == lol2) ); // This prints "False"
System.out.println( lol.equals(lol2) ); // This prints "True"

当您直接比较任何对象(String时,作为大写类是一个对象而不是像intfloatchar这样的原语与另一个对象,它不会比较对象内部的内容。相反,它会比较哈希码,以便您比较两个不同的引用。

lollol2可能同时打印lol,但仅仅因为它们具有相同的内容并不意味着它们是相同的"容器"可以这么说。这是相关的,因为您的代码使用String文字,该文字具有Java必须引用的哈希代码以进行比较。

.equals()方法允许Java将String与String进行比较,因为这样做必须按字符顺序完成。这是底层C的结果,以及C如何处理字符串,尽管C和Java字符串之间存在根本区别。

例如,比较C(char *)中的字符串,只会将指向第一个字符的指针值与比较char *中第一个字符的指针进行比较。因此,通过char * lol等价运算符比较char * lol2==的结果在C中基本相同,但存在细微差别(哈希代码,Java中的对象字符串等)

充分理解为什么会出现这种情况非常重要,因为它基本上是传递引用面向对象编程中的基石概念之一。

答案 1 :(得分:0)

好了多一点研究我发现我必须在if括号中使用equals方法,但我不确定为什么会有人帮我理解那会很酷。