我必须在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
有人可以建议如何做到吗?
为任何帮助干杯:)
答案 0 :(得分: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]
请注意,这意味着您需要确定数字何时进入堆栈以及何时应用运算符。
答案 1 :(得分: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 );
}
条件: - 此代码适用于二元运算符,不适用于一元运算符。
答案 2 :(得分:0)
我认为您应该使用ArrayList<Object>
而不是ArrayList<String>
并使用递归来计算括号中表达式的值。该算法简要如下:如果列表ArrayList<Object>
的元素是String
类的一个实例,那么我们就像你到目前为止那样处理它(它是单个数字或运算符)。如果列表ArrayList<Object>
的元素是List类的实例,则使用递归来计算表达式的值,该值位于该列表中。
例如,如果你有一个表达式:
14 * ( 2 - ( 3 / 2 ) )
它应该返回一个ArrayList:
[14.0, [2.0, [3.0, 2.0, /], -], *]
我希望我的回答对你有所帮助。