Java Trinomial Solver / Factorer有时会给出错误的答案

时间:2016-07-04 00:29:12

标签: java android

我是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的平方根时,我处理它的方式可能会扭曲答案。如果这是问题,我不确定如何修复它。

1 个答案:

答案 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>