如果Else语句使用Java使用JOptionPane

时间:2014-01-28 21:09:12

标签: java swing if-statement equals joptionpane

我是编程的新手 - 我正在学习Java。我正在尝试使用JOptionPane来处理if / else语句。除了陈述之外,一切正常。我只得到声明“停止并获取燃气!”无论输入什么答案(是或否)。

任何帮助将不胜感激!

//This program determine if I have to stop for gas on the way in to work. 

import javax.swing.JOptionPane;
import java.util.*;

public class GasIndicator
{

     public static void main(String[] args)
     {
          String answer;
          String outputStr1;
          String outputStr2;

     answer =            
          JOptionPane.showInputDialog ( "Do you have at least an eighth tank of gas? yes or no " );



          outputStr1 = "You can drive straight to work";
          outputStr2 = "Stop and get gas!";

          if (answer == "yes")

              JOptionPane.showMessageDialog(null, outputStr1, "Gas", JOptionPane.INFORMATION_MESSAGE);


          else 
              JOptionPane.showMessageDialog(null, outputStr2, "Gas", JOptionPane.INFORMATION_MESSAGE);


         System.exit(0);            


     }
}

3 个答案:

答案 0 :(得分:8)

if (answer == "yes")

比较String个对象时,您需要使用equals方法。

示例

if(answer.equals("yes")) {
    // Do code.
}

注意 :根据评论的建议,构建if语句更安全,如下所示:

if("yes".equals(answer)) {
    // Do code.
}

这不会NullPointerException answer等于null

解释

在Java中,当使用==运算符来比较类型Object的子类时,它将检查这两个对象是否是对同一对象的引用。他们不检查该对象的。因为您要比较值,所以需要使用equals方法。

它如何适用于您的代码

好吧,让我们来看看吧。您从String的回复中获得InputDialog类型。所以这是一个String。然后,您尝试将其与"yes"进行比较。这就是所谓的String literal,所以这意味着在那里创建了一个对象,因此有两个不同的对象。

请记住,在对象的情况下,您要比较引用类型;不是对象值,所以它总是导致false

答案 1 :(得分:3)

您必须将字符串与.equals(...)

进行比较
if("yes".equals(answer))

使用==将比较.equals(...)比较值的引用。

如果要比较对象(您创建的类或Java的一部分,例如String),您应该使用.equals(...)(除非您有意想要比较引用)。当您比较原始数据类型(例如intdoublechar等)时,您应该使用==

答案 2 :(得分:1)

您遇到了有关Java中字符串比较的常见问题。将字符串与'=='进行比较将不会达到预期效果 - 而是使用String类中的'.equals()':

if (answer.equals("yes"))

您通常应该确保检查null,因为对null变量执行.equals()会导致崩溃。一般来说,你真的希望你的条件看起来像这样:

if (answer != null && answer.equals("yes"))