如果Else语句使用Java使用JOptionPane

use*_*303 2 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);            


     }
}
Run Code Online (Sandbox Code Playgroud)

chr*_*her 8

if (answer == "yes")
Run Code Online (Sandbox Code Playgroud)

比较String对象时,需要使用该equals方法.

if(answer.equals("yes")) {
    // Do code.
}
Run Code Online (Sandbox Code Playgroud)

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

if("yes".equals(answer)) {
    // Do code.
}
Run Code Online (Sandbox Code Playgroud)

这将不通过NullPointerExceptionIS answer等于null.

说明

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

它如何应用于您的代码

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

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

  • 使用"yes".equals(answer)可能会更好,因为JOptionPane可以返回null (4认同)