2

クイズアプリを作ろうとしているので、答えのあるラジオボタンが5つあり、正解は1つだけです。次に、送信ボタンがあります。このボタンには、送信を処理するためのonClick="clickMethod"があります。

私のclickMethodは次のようになります。

public void clickMethod(View v){
                RadioGroup group1 = (RadioGroup) findViewById(R.id.radioGroup1);
                int selected = group1.getCheckedRadioButtonId();
                RadioButton button1 = (RadioButton) findViewById(selected);
                if (button1.getText()=="Right Answer")
                    Toast.makeText(this,"Correct!",Toast.LENGTH_SHORT).show();
                else
                    Toast.makeText(this,"Incorrect.",Toast.LENGTH_SHORT).show();
    }

ただし、IFステートメントを機能させることはできません。「button1.getText()」をパラメータとしてトーストを作成しようとすると、「Right Answer」文字列が出力されますが、何らかの理由でIFステートメント内で機能せず、チェックしてもELSEが常に実行されます。正しい答え。

誰かが何が起こっているのか、またはこれを行うためのより良い方法を知っていますか?

4

4 に答える 4

3

文字列を正しく比較していません。

== 演算子は、String オブジェクトの参照を比較する必要がある場合に使用されます。2 つの String 変数がメモリ内の同じオブジェクトを指している場合、比較は true を返します。それ以外の場合、比較は false を返します。「==」演算子は、String オブジェクトに存在するテキストの内容を比較しないことに注意してください。2 つの文字列が指している参照のみを比較します。

ここを読む: http://www.javabeginner.com/learn-java/java-string-comparison

于 2012-04-05T18:39:17.890 に答える
2

equalsString 比較には String メソッドを使用する必要があります。

public void clickMethod(View v){
    RadioGroup group1 = (RadioGroup) findViewById(R.id.radioGroup1);
    int selected = group1.getCheckedRadioButtonId();
    RadioButton button1 = (RadioButton) findViewById(selected);
    if ("Right Answer".equals(button1.getText())) {
        Toast.makeText(this,"Correct!",Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this,"Incorrect.",Toast.LENGTH_SHORT).show();
    }
}
于 2012-04-05T18:39:27.630 に答える
1

==Java では、使用する必要がある文字列を比較することはできませんequals()

if (button1.getText().equals("Right Answer"))
于 2012-04-05T18:39:34.700 に答える
1

Java でオブジェクトを比較する場合は、== 演算子ではなく equals() メソッドを使用する必要があります。

if (button1.getText().toString().equals("Right Answer")) {
 Toast.makeText(this,"Correct!",Toast.LENGTH_SHORT).show();
} else {
 Toast.makeText(this,"Incorrect.",Toast.LENGTH_SHORT).show();
}
于 2012-04-05T18:41:05.983 に答える