我是Java和Android开发人员的新手,我决定尝试制作一个解决三项式的应用程序。到目前为止它只适用于一些三项式,但不是全部,我无法弄清楚原因。
例如,如果我输入1x^2 + 5x + 6
,我会得到正确答案(-3和-2)。
但是如果我输入1x^2 - 1x - 6
,当我得到3和-2时,我得到两个长小数答案。
它确实正确地解决了1x^2 - 21a + 104
,这让我觉得问题不在于处理否定问题。
我尝试将代码翻译成C ++(因为我对它更熟悉)并且该程序为所有三项式提供了正确的答案。因此,我认为问题在于我只是对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%肯定错误在逻辑中。也许当我分配了三个String变量?
如果有人想自己测试,我可以提供activity_main.xml
代码。任何帮助表示赞赏。
编辑:我尝试了几个方程式,看起来,如果temp1为负,我只会得到错误的答案。这意味着当我发现temp1的平方根时,我处理它的方式可能会扭曲答案。如果这是问题,我不确定如何修复它。
答案 0 :(得分:0)
我修好了。我创建了aBox,bBox和cBox,每个都接受数字,带符号数字和十进制数字类型。这摆脱了我对+/-字符串的需求。它现在适用于没有想象答案的所有三项式。我也删除了这部分:
if (temp1 >= 0) temp1 = Math.sqrt(temp1);
else {temp1 = Math.sqrt(-1*temp1); temp1 = -1 * temp1;}
并将其替换为temp1 = Math.sqrt(temp1);
,因为如果输入的三项式返回了一个想象的答案,那么除了给出错误的答案之外我什么都没做。但/ p>