在尝试使用BODMAS规则解决复杂的数学表达式时,在Java中创建计算器的尝试失败,我认为创建一个参数为字符串的方法很重要。这种方法应检测括号和数学符号(即plus,times,minus,divide,open和close 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 LinkedList
类不会覆盖Object's
toString()
方法,因此您无法直接执行return list1;
并期望它打印列表中的元素。