私は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の平方根を見つけたときにそれを処理する方法は、答えを歪めるかもしれません。私はそれが問題でもそれを修正する方法はわかりません。
「私は2つの長い小数の答えを得る」正確に何を得るのですか? –
「あなたは何を得ますか?」私はx1 = -2.8979157616とx2 = 1.8979157616を得た – Todd
これらの数字の両方がどのように同じ数字で終わるか奇妙。 – Todd