2014-11-04 51 views
0

我正在開發我的第一個應用程序,它解決了二次公式,我遇到了一個問題,即當值a大於1時,應用程序給出了根的錯誤答案。 這是代碼:當A> 1時二次公式失敗?

package com.example.firstapp; 
import java.lang.Math; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void calculate(View v){ 
     EditText number1text = (EditText)findViewById(R.id.a); 
     EditText number2text = (EditText)findViewById(R.id.b); 
     EditText number3text = (EditText)findViewById(R.id.c); 
     double num1 = Double.parseDouble(number1text.getText().toString()) , num2 = Double.parseDouble(number2text.getText().toString()), num3 = Double.parseDouble(number3text.getText().toString()); 
     if ((num2 * num2) - (4*num1*num3) < 0){ 

     } 

     double ans = (double) ((-(num2)- (Math.sqrt(num2 * num2 - (4*num1*num3))))/2*num1); 

     double ans2 = (double) (((-(num2)+ Math.sqrt(num2 * num2 - (4*num1*num3))))/2*num1); 


     TextView answer = (TextView)findViewById(R.id.ans1); 
     answer.setText("The first root is: " + ans); 
     TextView answer2 = (TextView)findViewById(R.id.ans2); 
     answer2.setText("The second root is: " + ans2); 

    } 


    private TextView getText(String string) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @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; 
    } 

} 

任何有關爲什麼發生這種情況的幫助將是非常有用的。

由於提前

+0

好一兩件事,有沒有你的if語句中。 – 2014-11-04 23:13:18

+0

當您檢查b * b-4ac是否小於零時,您應該有代碼來計算其他內部的ans1和ans2。否則,如果行列式小於零,它仍然計算它。除此之外,還有許多不相關的代碼和num1,num2和num3不是變量的好名字,因此請考慮將它們更改爲a,b,c以匹配編寫公式的標準方式 – user1646196 2014-11-04 23:15:30

+0

添加功能一個沒有錯直到程序完成它需要做的一切。 OP還沒有處理「無根案件」,這很好,因爲他/她還沒有完成「a!= 1」案件。 – 2014-11-04 23:17:52

回答

1

正確的公式是-b ± sqrt(b^2 - 4ac)/(2a)

你有-b ± sqrt(b^2 - 4ac)/2 * a

支架將有助於即約2 * NUM1

+0

這是正確的答案。 – 2014-11-04 23:18:45

+0

小問題:它是'sqrt(b^2 - 4ac)',而不是*。 – matiash 2014-11-04 23:25:59