什么阻止正确的输出?

问题描述 投票:0回答:1

在尝试使用BODMAS规则解决复杂的数学表达式时,在Java中创建计算器的尝试失败,我认为创建一个参数为字符串的方法很重要。这种方法应检测括号和数学符号(即plustimesminusdivideopenclose brackets]) >),并且应该将上述任意两个符号之间的任何字符串说temp转换为重复说temp2,除非temp为空(即“”)。然后,该方法以与参数相同的顺序将temp2值和符号存储在Object列表中。该方法考虑到,如果第一个字符是数字,则要放置在列表中的first object应该是参数的子串的双精度值,该值从零到第一个符号的索引。如果最后一个字符是列表最后一个索引中的数字,则等效操作完成。上面的想法使我创建了以下项目:

package maths.calculator;

import java.util.Collections;
import java.util.LinkedList;

public class NumGetter {
    static String number;
    static LinkedList<Integer> preList = new LinkedList<>();
    static LinkedList<Integer> list = new LinkedList<>();
    static LinkedList<Object> list1 = new LinkedList<>();

    public static LinkedList<Object> getNumber(String num) {
        number = num;
        try {
            if (number == null) {
                number = "";
            }
            if (number == "") {
                return null;
            }

            for (char chars : number.toCharArray()) {
                if (chars < '0' || chars > '9' || chars != '.') {
                    preList.add(number.indexOf(chars));
                }
            }

            for (int index : preList) {
                if (index == -1) {
                    continue;
                }
                list.add(index);
            }

            int two = list.size();

            if (number.charAt(0) >= '0' && number.charAt(0) <= '9') {
                String local = number.substring(0, Collections.min(list));
                list1.add(Double.parseDouble(local));
            }

            for (int i = 0; i < two - 1; i++) {
                int min = Collections.min(list);
                list.remove(min);
                int next = Collections.min(list);
                String local = number.substring(++min, next);
                if (local.length() == 0) {
                    list1.add(number.charAt(preList.get(min)));
                    continue;
                }
                double temp = Double.parseDouble(local);
                list1.add(temp);
            }

            if (number.charAt(num.length() - 1) >= '0' && number.charAt(num.length() - 1) <= '9') {
                String local = number.substring(Collections.max(list));
                list1.add(Double.parseDouble(local));
            }

        } catch (Exception e) {
            System.out.println(e.getStackTrace());
        }
        return list1;
    }

}

即使我导入了上面的类并调用了getNumber方法,如下所示的代码也足够令人满意,如下所示:

import java.util.LinkedList;

import maths.calculator.NumGetter;

public class Text {
    public static void main(String[] args) {

        String one = "(45+17-3)";

        LinkedList<Object> two = NumGetter.getNumber(one);
        System.out.println(two);
    }
}

问题出在输出中。在每种情况下都会引发异常。通常,上面的结果是:

[Ljava.lang.StackTraceElement;@2ff4acd0
[4]

可能出了什么问题,请...我非常需要你的大脑。我的无法发现错误。

[按照BODMAS规则解决复杂的数学表达式,但在Java中创建计算器的尝试失败,我认为创建一个参数为...的方法很重要。]]

java debugging
1个回答
-1
投票

关于输出:

Java LinkedList类不会覆盖Object's toString()方法,因此您无法直接执行return list1;并期望它打印列表中的元素。

© www.soinside.com 2019 - 2024. All rights reserved.