-1

このコードを書くと、このエラーが表示されます。

マークされた行に「最終的なローカル変数 peyvaDawi は、囲んでいる型で定義されているため、割り当てることができません」と表示されます。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ferheng=new Veritabani(this);
    final ImageButton btn=(ImageButton)findViewById(R.id.btnBigere);
    final EditText edtPeyv=(EditText)findViewById(R.id.edtPeyv);
    final RadioButton rbKT=(RadioButton)findViewById(R.id.rbKT);
    final RadioButton rbTK=(RadioButton)findViewById(R.id.rbTK);

    final String peyvaDawi="emre";
    btn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            final boolean KT=rbKT.isChecked();
            final boolean TK=rbTK.isChecked();

            sonuc="";
            String strPeyv=edtPeyv.getText().toString();
            Boolean tenePeyv=false;
            if(strPeyv==peyvaDawi)
                tenePeyv=true;
            else
                tenePeyv=false;
            if(KT)
                Arama(strPeyv,"kurdi",tenePeyv);
            if(TK)
                Arama(strPeyv,"tirki",tenePeyv);
                            peyvaDawi=strPeyv;//<<<<<<<<<<<<<<<<< i see error in this line.

        }
    });
}

行 peyvaDawi=strPeyv; にエラーが表示されます。

4

1 に答える 1

3

peyvaDawiはfinalとして宣言されているため、値が割り当てられると、再割り当てすることはできません。これをしないでください。とにかくスコープがこのメソッドに制限されているローカル文字列変数の値を変更したいのはなぜですか?

また、を使用して文字列を比較しないでください==。代わりにequals(...)またはメソッドを使用してください。equalsIgnoreCase(...)==は、2つのオブジェクトが同じであるかどうかをチェックしますが、これはあなたが興味を持っているものではないことを理解してください。一方、メソッドは、2つの文字列が同じ順序で同じ文字を持っているかどうかをチェックします。これが、ここで重要です。だから代わりに

if (fu == "bar") {
  // do something
}

行う、

if ("bar".equals(fu)) {
  // do something
}

また、

if ("bar".equalsIgnoreCase(fu)) {
  // do something
}

また、すべてのブロックを中括弧で囲む必要があります。これには、1行の長さの場合でも、実際にはインデントが間違っているためにコードの行がブロック内にあると誤解しないように、すべてのif、elseブロックが含まれます。 't。

于 2012-07-22T01:12:37.360 に答える