-1

私は数学アプリを作成しようとしていますが、このコードを使用すると、常に異なる数字で同じ答えが得られます。プログラムは正常に実行され、ロードされ、データを入力できますが、常に答えが 0.0 になります。

((- numB + Math.sqrt((Math.pow(numB, 2))-4*numA*numC))/2*numA)

完全なコード

public class MainActivityQuadraticEquation extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_quadraticequation);

        Button btnBack = (Button)findViewById(R.id.btnBack);

        btnBack.setOnClickListener(new Button.OnClickListener() 
        {
         public void onClick(View v)
            {
             Log.i("Click Occured","You Clicked the Back button");

             Intent myIntent = new Intent(MainActivityQuadraticEquation.this, MainActivity.class);
                startActivity(myIntent);
            }

        });

    }

    public void Calculate(View v)
    {
        EditText inputA = (EditText)findViewById(R.id.InputA);
        EditText inputB = (EditText)findViewById(R.id.InputB);
        EditText inputC = (EditText)findViewById(R.id.InputC);

        Integer numA = Integer.parseInt(inputA.getText().toString()), numB = Integer.parseInt(inputB.getText().toString()), numC = Integer.parseInt(inputC.getText().toString());
        Integer ans_1 = (int) ((- numB + Math.sqrt((Math.pow(numB, 2))-4*numA*numC))/2*numA);
        Integer ans_2 = (int) ((- numB - Math.sqrt((Math.pow(numB, 2))-4*numA*numC))/2*numA);

        double ans_1a = ans_1;
        double ans_2a = ans_2;
        String ans1 = String.valueOf(ans_1a);
        String ans2 = String.valueOf(ans_2a);


        TextView answer1 = (TextView)findViewById(R.id.Ans);
        TextView answer2 = (TextView)findViewById(R.id.Ans2);
        answer1.setText("Answer 1: " + ans1);
        //System.out.println("Answer 1: " + ans1);
        answer2.setText("Answer 2: " + ans2); 
        //System.out.println("Answer 2: " + ans2);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

動作しますが、動作しません

4

3 に答える 3

2

あなたの問題は数学ではありません。解析で何か問題が発生しているか、TextEditオブジェクトが期待どおりに動作していない可能性がありますが、計算自体は機能するはずです。

int numA = 1;
int numB = -6;
int numC = 8;
double ans_1 = (-numB + Math.sqrt(numB * numB - 4 * numA * numC)) / (2 * numA);
double ans_2 = (-numB - Math.sqrt(numB * numB - 4 * numA * numC)) / (2 * numA);
System.out.println(ans_1 + "\n" + ans_2);

出力:

4.0
2.0

もちろん、提案されているように、これらすべてに double を使用することに固執する必要があります。また、実際の解決策がない場合 (Math.sqrtが負の数で呼び出された場合) をどのように処理するかは明確ではありません。/2*numAまた、ここでは (驚くべきことに) 動作しているように見えますが、代わりに/(2 * numA).

于 2013-06-16T03:08:14.780 に答える
0

への中間キャストの精度が低下している可能性がありますint。また、代わりにこれらの整数値を double として読み取ることができ、計算で精度が失われない場合もあります。

したがって、コードの重要な部分は次のようになります。

double numA = Double.parseDouble(inputA.getText().toString()),
       numB = Double.parseDouble(inputB.getText().toString()),
       numC = Double.parseDouble(inputC.getText().toString());
double ans_1 = ((- numB + Math.sqrt((Math.pow(numB, 2))-4*numA*numC))/2*numA);
double ans_2 = ((- numB - Math.sqrt((Math.pow(numB, 2))-4*numA*numC))/2*numA);

String ans1 = String.valueOf(ans_1);
String ans2 = String.valueOf(ans_2);

intand/orへの中間キャストIntegerは役に立たず、不必要です。

于 2013-06-16T02:58:13.453 に答える
0
  • ans_1andans_2を にキャストしないでくださいint。精度が低下しています。 に割り当ててdoubleください。
    • double ans_1 = ((-numB ...)
  • 入力数値は慎重に選択してください - 二次式が機能することを確認してください。つまり、b^2 - 4ac> 0でなければ機能しませんMath.sqrt()

これでこれ以上問題はないと思います。

于 2013-06-16T03:05:47.137 に答える