2

我必须在java中制作一个能够使用括号,加号,减号,除法和乘法的计算器,到目前为止我已经得到它,所以如果用户要输入:

14 * ( 2 - ( 3 / 2 ) )

然后它返回一个 ArrayList 为:

[14.0, 2.0, 3.0, 2.0, /, -, *]

这就是我想要的

然后我如何将“/”应用于 2 和 3 以获得:

[14.0, 2.0, 1.5, -, *]

然后以此类推,所以 '-' 到 2 和 1.5 得到:

[14.0, 0.5, *] 

这个进位的最终答案是 7.0

谁能建议如何做到这一点?

为任何帮助干杯:)

4

3 回答 3

1

您应该只将数字压入堆栈。所以运算符不会进入堆栈。这意味着列表如下:

[14.0, 2.0, 3.0, 2.0]
// applying / by popping two elements and adding the result
[14.0, 2.0, 1.5]
// applying - by popping two elements and adding the result
[14.0, 0.5]
// applying * by popping two elements and adding the result
[7.0]

请注意,这意味着由您决定数字何时进入堆栈以及何时应用运算符。

于 2013-12-27T11:14:31.963 回答
0

我认为你应该使用anArrayList<Object>代替ArrayList<String>并使用递归来计算括号中表达式的值。该算法简要如下:如果列表的元素ArrayList<Object>是类的一个实例String,那么我们将它视为您目前所做的(它是单个数字或运算符)。如果列表的元素ArrayList<Object>是 List 类的实例,则使用递归来计算表达式的值,该表达式位于该列表中。
例如,如果你有一个表达式:

14 * ( 2 - ( 3 / 2 ) )

它应该返回一个 ArrayList 为:

[14.0, [2.0, [3.0, 2.0, /], -], *]

希望我的回答对你有一点帮助。

于 2013-12-30T13:32:27.633 回答
0

你可以使用这样的东西:

List<String> list=new ArrayList<String>();
     list.add("5");
     list.add("6");
     list.add("7");
     list.add("-");
     list.add("+");
     String prev=null;
     String cur=null;

     List newList=new ArrayList(list);
     Iterator<String> iterator=newList.iterator();
     String val;
     int index=0;

     while(iterator.hasNext()){
          val=iterator.next();
         if(val.matches("(-)?\\d+([.]\\d+)?")){
             prev=cur;
             cur=val;                            
         }
         else{
                index=list.indexOf(prev);
                list.remove(prev);
                list.remove(cur);
                list.remove(val);

            if(val.equals("+")){
                list.add(index,(Float.parseFloat(prev)+Float.parseFloat(cur))+"");
            }
            else if(val.equals("-")){
                list.add(index,(Float.parseFloat(prev)-Float.parseFloat(cur))+"");
            }
           //Initialize iterator to point first element
            newList=new ArrayList(list);
            iterator=newList.iterator();
            prev=null;
            cur=null;
         }
     }



    iterator=list.iterator();
     while(iterator.hasNext()){
         String val1=iterator.next();
         System.out.println(" ## "+val1 );
     }

条件: - 此代码适用于二元运算符,不适用于一元运算符。

于 2013-12-27T11:28:52.403 回答