2016-07-04 9 views
0

私はJavaとAndroidの両方を開発するのが初めてで、私は三項問題を解くアプリを作ることにしました。これまでのところ、それは一部の三柱についてのみ機能しますが、すべてではありません。理由を理解できません。Javaトリノミアルソルバー/ Factorerが時々間違った答えを返す

たとえば、1x^2 + 5x + 6と入力すると、正解(-3、-2)が得られます。

しかし、私が1x^2 - 1x - 6と入力すると、3と-2を得るべきときに2つの長い10進数の答えが得られます。

でも、私は問題がネガを扱うことではないと思うのですが、1x^2 - 21a + 104を正しく解決します。

私はコードをC++に翻訳しようとしましたが(私はそれに精通しているので)、そのプログラムはすべての3項式に対して正解を返しました。だから私は問題は私がちょうどJavaで悪いと思っている。

マイコード:

package com.example.todd.factortrinomials; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

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

    public void onButtonClick(View v) { 

     // declare variables 
     EditText aNum = (EditText)findViewById(R.id.aBox); 
     EditText bNum = (EditText)findViewById(R.id.bBox); 
     EditText cNum = (EditText)findViewById(R.id.cBox); 
     EditText aSign = (EditText)findViewById(R.id.box1); 
     EditText bSign = (EditText)findViewById(R.id.box2); 
     EditText cSign = (EditText)findViewById(R.id.box3); 

     TextView ans1 = (TextView)findViewById(R.id.x1Box); 
     TextView ans2 = (TextView)findViewById(R.id.x2Box); 

     // input 
     int a = Integer.parseInt(aNum.getText().toString()); 
     int b = Integer.parseInt(bNum.getText().toString()); 
     int c = Integer.parseInt(cNum.getText().toString()); 
     String a1 = (aSign.getText().toString()); 
     String b1 = (bSign.getText().toString()); 
     String c1 = (cSign.getText().toString()); 


     // process solution 
     if (a1 == "-") a = -1 * a; 
     if (b1 == "-") b = -1 * b; 
     if (c1 == "-") c = -1 * c; 

     double temp1 = (b * b) - (4 * a * c); 
     if (temp1 >= 0) temp1 = Math.sqrt(temp1); 
     else {temp1 = Math.sqrt(-1*temp1); temp1 = -1 * temp1;} 
     double x1 = (-b + temp1)/(2*a); 
     double x2 = (-b - temp1)/(2*a); 


     //output 
     ans1.setText(Double.toString(x1)); 
     ans2.setText(Double.toString(x2)); 
    } 
} 

その他の情報:A、B、およびCのためのテキストフィールドがなかったので、文字列として個別に読まれ、A、B、およびCの標識(プラスまたはマイナス)何らかの理由で負の数を受け入れたいそれはちょっと聞こえませんが、うまくいきます。私は90%エラーがロジックにあると確信しています。たぶん私は3つの文字列変数を割り当てた?

誰かが独自にテストしたいと思っているコードをactivity_main.xmlに与えることができます。どんな助けもありがとうございます。

編集:私はいくつかの方程式を試しましたのように私はtemp1が負の場合にのみ間違った答えを得るようです。私がtemp1の平方根を見つけたときにそれを処理する方法は、答えを歪めるかもしれません。私はそれが問題でもそれを修正する方法はわかりません。

+0

「私は2つの長い小数の答えを得る」正確に何を得るのですか? –

+0

「あなたは何を得ますか?」私はx1 = -2.8979157616とx2 = 1.8979157616を得た – Todd

+0

これらの数字の両方がどのように同じ数字で終わるか奇妙。 – Todd

答えて

0

私はそれを修正しました。私は、aBox、bBox、cBoxをそれぞれ番号、符号付き番号、および10進数の型を受け入れました。これは+/-文字列の必要性を取り除きました。それは今、想像上の答えを持たないすべての三項関係に適用されます。また、私はこの部分削除:

if (temp1 >= 0) temp1 = Math.sqrt(temp1); 
else {temp1 = Math.sqrt(-1*temp1); temp1 = -1 * temp1;} 

をそしてtemp1 = Math.sqrt(temp1);に置き換え、私は三項は返しますが、現在とにかくない架空の答えを、入力した場合、間違った答えを与える除いて絶対に何もしなかったものとして。

関連する問題