-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

当然,正如建议的那样,您应该坚持使用双打来完成所有这些操作。此外,尚不清楚您如何处理没有真正解决方案的情况(何时Math.sqrt使用负数调用)。此外,它似乎在这里工作(令人惊讶),但不是/2*numA你真的应该有/(2 * numA).

于 2013-06-16T03:08:14.780 回答
0

您可能会在中间转换为int. 在这种情况下,您可以将这些整数值读取为双精度值,而不会在计算中丢失任何精度。

因此,代码的关键部分变为:

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);

中间转换int和/或是Integer无用的和不必要的。

于 2013-06-16T02:58:13.453 回答
0
  • 不要将您的ans_1andans_2转换为int. 您正在失去精度,请将其分配给double.
    • double ans_1 = ((-numB ...)
  • 明智地选择输入数字 - 确保您的二次公式有效,即b^2 - 4ac必须 > 0Math.sqrt()才能有效。

我没有看到任何更多的问题。

于 2013-06-16T03:05:47.137 回答