-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

文字列の比較には常に使用String#equals()されます。Equals 演算子==は参照を比較するだけであり、2 つのオブジェクトの内容が意味のある意味で等しい場合でも、 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

ObjectJava で s を比較する場合、変数の==を比較するのではなく、参照を比較します。したがって、以下は false を返します。

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

しかし、これは true を返します:

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

Everyには、オブジェクト内の実際の値を比較するために、すべてのサブクラスに対してオーバーライドする必要がObjectあるメソッドがあります。equals()したがって、以下は true を返します。

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

ただし、null ポインターには注意する必要があります。s1(上記の例で) が のnull場合、例外がスローされるため、次のように常に最初に null を確認する必要があります。

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

仕組み&&上、式の前半が false の場合、式の後半は評価されません。したがって、null ポインター例外にヒットすることなく false が返されます。

于 2013-08-12T15:49:00.787 に答える
2

文字列比較を実行している場合は、これを使用する必要があります

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

「equals」は 2 つの文字列を比較するため、「equalsIgnoreCase」は大文字と小文字を区別せずに同じことを行います。

于 2013-08-12T15:42:56.760 に答える
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これにより、null 値が含まれている場合に null ポインター例外が回避されます。あなたの変数名はかなりひどいです。

于 2013-08-12T15:44:44.997 に答える