-1

目前正在开发一个简单的系统。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

4 回答 4

4

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

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

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

于 2013-08-12T15:42:25.457 回答
2

如果你正在执行一个字符串比较,你应该使用这个

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

因为 "equals" 比较两个字符串,而 "equalsIgnoreCase" 做同样的事情,忽略大小写。

于 2013-08-12T15:42:56.760 回答
2

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

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

但这将返回 true:

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

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

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

然而,你必须小心空指针——如果s1(在上面的例子中)是null,它会抛出一个异常,所以你应该总是首先检查空指针,像这样:

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

由于工作方式&&的原因,如果前半部分为假,则表达式的后半部分不会被计算。所以它会返回 false 而不会遇到空指针异常。

于 2013-08-12T15:49:00.787 回答
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包含空值,这将避免空指针异常。你的变量名非常糟糕。

于 2013-08-12T15:44:44.997 回答