有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我正在学习使用安卓 studio制作一个应用程序,所以我正在制作一个简单的计算器,但我遇到了一个获得正确答案的问题

我试过几种方法让它工作,但它返回的答案是非常错误的。例如,它返回1+2=99.0和1*2=2450.0,以此类推。。所有的按钮都能工作,我认为主要的方法很好。下面是我在单击equals按钮时将TextView中的CharSequence转换为字符串的方式

Button btnEquals = (Button)findViewById(R.id.btnEquals);
    btnEquals.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            String problem = textDisplay.getText().toString();
            double intermediate = evalProblem(problem);
            String answer = "" + intermediate;

            textDisplay.setText(answer);

        }
    });

这就是我调用的方法,用来计算方程

public static Double evalProblem(String s) {
    double output;
    double mult = 0.0;
    double add = 0.0;
    double sub = 0.0;
    double div = 0.0;

    if (s.contains("*")) {
        int x = s.indexOf("*");
        mult = s.charAt(x-1)*s.charAt(x+1);
    }
    if (s.contains("/")) {
        int x = s.indexOf("/");
        div = s.charAt(x - 1) / s.charAt(x + 1);
    }
    if (s.contains("+")) {
        int x = s.indexOf(("+"));
        add = s.charAt(x-1) + s.charAt(x+1);
    }
    if (s.contains("-")) {
        int x = s.indexOf("-");
        sub = s.charAt(x - 1) - s.charAt(x + 1);
    }


    output = mult + add + sub + div;
    return output;
}

共 (1) 个答案

  1. # 1 楼答案

    .charAt()返回字符,而不是整数。例如,“8*8”有三个字符——“8”、“8”和“8”。当对字符执行数学运算时,它使用字符的ASCII值,例如:'A'的ASCII值为65'0'的值为48

    因此,‘1’+‘2’=49+50=99

    需要将“*”前面的字符串部分转换为数字,对吗?Java有一个简单的解决方案:Double.parseDouble()方法:

    String text = "567";
    int number = Double.parseDouble(text);
    

    要解决您的特定问题,您应该尝试以下方法:

    int x = s.indexOf('*');
    mult = Double.parseDouble(s.substring(0, x)) * Double.parseDouble(s.substring(x+1));
    

    这个解决方案最好的部分是,您可以使用多个数字的数字,因为代码在s中取“*”之前和之后的所有内容,并将它们转换为数字

    <强>编辑:下面的注释中提到了U/MARKSLASE,您应该考虑使用java中的内置解析库,如这里所见:Algebra equation parser for java

    编辑2:我曾建议使用Integer.parseInt()将字符串转换为数字,但正如u/MartinZeitler在下面的评论中指出的那样,使用Double.parseDouble()将字符串转换为双精度值会更好