为了账号安全,请及时绑定邮箱和手机立即绑定

如何对字符串数组列表中的两个数字进行数学表达式

如何对字符串数组列表中的两个数字进行数学表达式

慕的地10843 2021-06-08 13:35:47
我试图从数组列表中读取符号,然后对其前后的两个数字进行表达式(例如, i-1 * i+1) 。然而,生成的结果总是 5、6 或 12!我真的找不到代码中的问题所在。我使用 arraylist 是因为它比数组更动态,从某种意义上说,我可以删除元素而不用关心“数组”的长度。    String replaceStr = replacer.replace("+", " + ");我正在尝试添加空格以将整数作为一个元素,而不是使用 charAt,这将不允许我将一个多于一位的数字带入等式。    Double Computing(String equation) {    double result = 0.0;    double multiplResult = 1.0; //    String replacer = equation;    String replaceStr = replacer.replace("+", " + ");    String replaceStr1 = replaceStr.replace("x", " x ");    String replaceStr2 = replaceStr1.replace("-", " - ");    String replaceStr3 = replaceStr2.replace("/", " / ");    String[] items = replaceStr3.split("\\s*");    ArrayList<String> list = new ArrayList<String>((Arrays.asList(items)));   for (int i = 0; i < list.size(); i++ ) {       String NewNum;       if (list.get(i) == "x" || list.get(i) == "/"){           if(list.get(i) == "x") {               NewNum = String.valueOf(Double.parseDouble(list.get(i - 1)) * Double.parseDouble(list.get(i + 1)));               list.set(i, NewNum);               list.remove(i-1);               list.remove(i+1);           }           else if (list.get(i) == "/"){               NewNum = String.valueOf(Double.parseDouble(list.get(i - 1)) / Double.parseDouble(list.get(i + 1)));               list.set(i, NewNum);               list.remove(i-1);               list.remove(i+1);           }           multiplResult *= Double.parseDouble(list.get(0));       }       if (list.get(i) == "+" || list.get(i) == "-"){           if(list.get(i) == "+") {               NewNum = String.valueOf(Double.parseDouble(list.get(i - 1)) + Double.parseDouble(list.get(i + 1)));               list.set(i, NewNum);               list.remove(i-1);               list.remove(i+1);           }           }           multiplResult *= Double.parseDouble(list.get(0));       }       result += multiplResult;    }return result;}
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

这是一个简单的评估器:


public class Evaluator {

    private final char[] chars;

    private int pos;


    public static double evaluate(String expr) {

        return new Evaluator(expr).expression();

    }


    private Evaluator(String expr) {

        chars = expr.toCharArray();

    }


    private double expression() {

        double value = term();

        char op;

        while (skipSpaces() && ((op = chars[pos]) == '+' || op == '-')) {

            ++pos;

            double other = term();

            switch (op) {

                case '+':

                    value += other;

                    break;

                case '-':

                    value -= other;

                    break;

            }

        }

        return value;

    }


    private double term() {

        double value = factor();

        char op;

        while (skipSpaces() && ((op = chars[pos]) == 'x' || op == '/')) {

            ++pos;

            double other = factor();

            switch (op) {

                case 'x':

                    value *= other;

                    break;

                case '/':

                    value /= other;

                    break;

            }

        }

        return value;

    }


    private double factor() {

        if (skipSpaces() && chars[pos] == '(') {

            ++pos;

            double result = expression();

            if (skipSpaces() && chars[pos] == ')') {

                ++pos;

            }

            return result;

        }

        return number();

    }


    private double number() {

        if (!skipSpaces()) {

            return 0;

        }

        int start = pos;

        if (chars[pos] == '+' || chars[pos] == '-') {

            ++pos;

        }

        if (pos >= chars.length || !Character.isDigit(chars[pos])) {

            return 0;

        }

        do {

            ++pos;

        } while (pos < chars.length

                && (Character.isDigit(chars[pos]) || chars[pos] == '.'));

        return Double.parseDouble(new String(chars, start, pos-start));

    }


    private boolean skipSpaces() {

        while (pos < chars.length && Character.isWhitespace(chars[pos])) {

            ++pos;

        }

        return pos < chars.length;

    }

}


查看完整回答
反对 回复 2021-06-10
  • 2 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信