Ich bin neu in Java und Android Entwicklung, und ich entschied mich zu versuchen, eine App, die Trinome löst. Bis jetzt funktioniert es nur für einige Trinome, aber nicht für alle, und ich kann nicht herausfinden warum.Java Trinomial Solver/Factorer gibt manchmal falsche Antworten
Zum Beispiel, wenn ich 1x^2 + 5x + 6
eingeben bekomme ich die richtigen Antworten (-3 und -2).
Aber wenn ich 1x^2 - 1x - 6
eingeben, bekomme ich zwei lange Dezimalantworten, wenn ich 3 und -2 bekommen sollte.
Es löst 1x^2 - 21a + 104
zwar richtig, was mich denken lässt, dass das Problem nicht mit der Handhabung von Negativen ist.
Ich habe versucht, den Code nach C++ zu übersetzen (da ich damit besser vertraut bin) und dieses Programm gab die richtigen Antworten für alle Trinome. Ich denke, das Problem ist, dass ich nur schlecht in Java bin.
Mein Code:
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));
}
}
Weitere Informationen: Die Vorzeichen (plus oder minus) für A, B und C werden separat als Strings, weil die Textfelder für A, B und C nicht gelesen haben Ich möchte aus irgendeinem Grund negative Zahlen akzeptieren. Es klingt schlampig, aber es funktioniert. Ich bin 90% sicher, dass der Fehler in der Logik ist. Vielleicht, wenn ich die drei String-Variablen zugewiesen habe?
Ich kann den Code activity_main.xml
geben, wenn jemand es selbst testen möchte. Jede Hilfe wird geschätzt.
Edit: Ich habe ein paar mehr Gleichungen versucht und es sieht wie ich bekomme nur die falsche Antwort, wenn temp1 negativ ist. Die Art, wie ich damit umgehe, wenn ich die Quadratwurzel von temp1 finde, könnte die Antwort verzerren. Ich bin mir nicht sicher, wie ich es beheben soll, wenn das das Problem ist.
"Ich bekomme zwei lange Dezimal-Antworten" Was genau bekommen Sie? –
"Was genau bekommst du?" Ich habe x1 = -2,8979157616 und x2 = 1,8979157616 – Todd
Seltsam, wie diese beiden Zahlen in den gleichen Ziffern enden. – Todd