0

私は複素数(除算、減算、乗算など)を計算できる小さなアプリに取り組んできました。明らかなコンパイル エラーはありませんが、プログラムを実行すると、理解できない、または修正方法がわからない一連の実行時エラーが発生します。明らかな何かが欠けていますか?これは私のコードです:

    package complex.OliverV;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.RadioButton;
    import android.widget.EditText;

    public class ComplexNumbersActivity extends Activity {

Button Check;
RadioButton plus, minus, multiply, div;
EditText X1,X2,Y1,Y2;
TextView Ans;
int sign;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Check = (Button) findViewById(R.id.Check);
    plus = (RadioButton) findViewById(R.id.plus);
    minus = (RadioButton) findViewById(R.id.minus);
    multiply = (RadioButton) findViewById(R.id.multiply);
    div = (RadioButton) findViewById(R.id.div);
    Ans = (TextView) findViewById(R.id.Ans);
    plus.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            sign=1;
        }


    });
    minus.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            sign=2;
        }


    });
    multiply.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            sign=3;
        }


    });
    div.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            sign=4;
        }


    });
    Check.setOnClickListener(new View.OnClickListener(){

        String xs=X1.getText().toString();
        String xss=X2.getText().toString();
        String ys=Y1.getText().toString();
        String yss=Y2.getText().toString();



        double x3,y3;

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(xs!="" && xss!="" && ys!="" && yss!="")
            {
            double x1=Double.parseDouble(xs);
            double x2=Double.parseDouble(xss);
            double y1=Double.parseDouble(ys);
            double y2=Double.parseDouble(yss);
            switch(sign)
            {
            case(1):
            {
                x3=x1+x2;
                y3=y1+y2;
            }
            case(2):
            {
                x3=x1-x2;
                y3=y1-y2;
            }
            case(3):
            {
                x3=(x1*x2-y1*y2);
                y3=(x2*y1 + x1*y2);
            }
            case(4):
            {
                if(x2!=0 && y2!=0)
                {
                x3 = (x1 * x2 + y1 * y2) / (x2 * x2 + y2 * y2);
                y3 = (x2 * y1 - x1 * y2) / (x2 * x2 + y2 * y2);
                }
                else
                {
                    Ans.setText("Enter valid numbers!");
                }
            }
        }
            Ans.setText("x="+x3+"y="+y3);
        }
            else
            {
                Ans.setText("Enter valid numbers!");
            }

        }
    });
}

}

発生したエラーのスクリーンショットも追加しています。エラー テキストをコピーするとめちゃくちゃに見えるので、画像を入れます。長い質問で申し訳ありません。時間を割いて私を助けてくれる人に感謝します。あらゆる助けにとても感謝しています。:)

4

2 に答える 2

2

Ted Hoppが彼の答えで述べたように初期化X1,X2,Y1,Y2してからonCreate()

これを変える:

if(xs!="" && xss!="" && ys!="" && yss!="")

に:

if( (xs != null && !xs.equal("")) && 
    (xss != null && !xss.equal("")) && 
    (ys !== null && !ys.equal("")) && 
    (yss != null &&!yss.equal("")) )
于 2013-02-26T20:51:47.717 に答える
1

問題はここにあるようです:

Check.setOnClickListener(new View.OnClickListener(){

    String xs=X1.getText().toString();
    String xss=X2.getText().toString();
    String ys=Y1.getText().toString();
    String yss=Y2.getText().toString();

    . . .
}

これが 内で実行されているonCreate場合、フィールドX1などは初期化されていません。あったとしても、フィールドにはデフォルトのテキストしかありませんが、これはおそらくあなたが望むものではありません. 割り当てをonClickリスナーのメソッドに移動する必要があります。そうすれば、onClickメソッドの実行時に現在のフィールドの内容を操作できます。

今後は、画面のスナップショットではなく、logcat 出力のテキストを投稿してください。それができない場合は、少なくとも列のサイズを変更し、必要に応じてスクロールして、logcat メッセージのテキスト全体を表示できるようにします。また、コード内のどの行が例外を生成しているかを特定してください。

于 2013-02-26T20:51:42.313 に答える