如果else语句无法使用

时间:2013-08-12 15:38:31

标签: java netbeans if-statement conditional-statements

目前正致力于一个简单的系统。 if else语句不会影响任何内容。 这是代码:

tollRate()
{

    JFrame a = new JFrame();
    setTitle("Highway Toll Rates System");
    setSize(600, 400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(5, 2));

    p1.setLayout(new GridLayout(1, 2));
    p1.add(L1);                                             
    p1.add(t1);
    p2.setLayout(new GridLayout(1, 2));
    p2.add(L2);
    p2.add(t2);
    p3.setLayout(new GridLayout(1, 2));
    p3.add(L3);
    p3.add(t3);
    p4.setLayout(new FlowLayout());
    p4.add(b1);
    p4.add(b2);
    p5.setLayout(new FlowLayout());
    p5.add(L4);
    add(p1); add(p2); add(p3); add(p4); add(p5);

    b1.addActionListener(this);
b2.addActionListener(this);
}

public void actionPerformed(ActionEvent a) 
{
    Object source = a.getSource();
    if(source == b2) 
    {
          this.dispose();
    }
     else if(source == b1)
     {
        i = t1.getText();
        j = t2.getText();
        k = t3.getText();

        if (i!=SUNGAI BULOH)
        {
            JOptionPane.showMessageDialog(null, "Invalid Location" );
        }



     }








}

 public static void main(String[] args) 
{
    tollRate a = new tollRate();

}
}

任何人都可以帮助我使用此代码中的if else语句吗?如果用户在i中键入“SUNGAI BULOH”以外的任何内容,我希望系统显示“无效位置”。 提前谢谢。

4 个答案:

答案 0 :(得分:4)

Alaways使用String#equals()来比较字符串。等于运算符==仅比较引用,即使两个对象的内容有意义相等,也可能导致 false

   if (i!= null && !i.equals("SUNGAI BULOH")) // notice "quotes"
    {
        JOptionPane.showMessageDialog(null, "Invalid Location" );
    }

另请注意,文字字符串始终用Java中的"double"引号括起来。没有它们,编译器实际上会将它们视为Java标识符。

答案 1 :(得分:2)

如果您正在执行字符串比较,则应使用此

if ( !"SUNGAI BULOH".equalsIgnoreCase(i) ){
   // do stuff
}

由于“equals”比较两个字符串,而“equalsIgnoreCase”做同样的事情,忽略大小写。

答案 2 :(得分:2)

在Java中比较Object时,==不会比较变量的,而是比较引用。所以以下内容将返回false:

string s1 = "Hello";
string s2 = "Hello";
return s1==s2;

但这会回归真实:

string s1 = "Hello";
string s2 = s1;
return s1==s2;

每个Object都有一个equals()方法,对于每个子类,应该重写该方法以比较对象中的实际值。所以以下内容将返回true:

string s1 = "Hello";
string s2 = "Hello";
return s1.equals(s2);

但是,你必须小心空指针 - 如果s1(在上面的例子中)是null,它将抛出异常,所以你应该首先检查null,就像这样:

return s1 != null && s1.equals(s2);

由于&&的工作方式,如果前半部分为假,则不会评估表达式的后半部分。所以它会在没有命中空指针异常的情况下返回false。

答案 3 :(得分:1)

我甚至不确定这是如何编译的......

以下是我要测试代码的方法:

public void actionPerformed(ActionEvent a)  {
    Object source = a.getSource();
    if(source == b2) {
          System.out.println("b1 selected");
          this.dispose();
    } else if(source == b1) {
        System.out.println("b2 selected");
        i = t1.getText();
        j = t2.getText();
        k = t3.getText();
        System.out.println("i text: " + i);

        if (!"SUNGAI BULOH".equalsIgnoreCase(i)) {
            JOptionPane.showMessageDialog(null, "Invalid Location" );
        }
     }

如果t1包含空值,这将避免空指针异常。你的变量名很糟糕。