我最终要做的是:
1)Go through operators ArrayList and find the * or / (whatever comes first)
2)Go to numbers ArrayList and do the operation * or / at index and index+1
3)Add the evaluated value and remove the numbers at index and index+1
4)Remove operator at index
5)Repeat loop until higher precedence operators are gone.
6)Do the same for operators of lower precedence (+ and -).
答案 0 :(得分:3)
您遇到逻辑错误:
对于案件:
Operators: [+,-,/,*]
Numbers:[5,2,4,6,3]
如果您对代码执行干运行,则会收到错误。
当您执行在jth
位置添加结果的操作,并删除2个数字和运算符时,j
不应该在下一次迭代中增加,实际上您正在跳过下一个运算符。因此,您只需要添加j--
以及这些操作。
答案 1 :(得分:1)
我还没有尝试调试程序。但是,在将for
与索引一起使用时,在从数组中删除元素的同时,必须非常小心。假设您有一个ArrayList
,其值为"a", "b", "c", "d", "e"
,并且您可以编写类似
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
list.remove(i);
}
第一次循环时,i
为0,元素为"a"
。然后列表变为"b", "c", "d", "e"
。然后i
递增。由于元素已移位,但i
递增,因此打印的下一个元素将为"c"
,并跳过第二个元素。
如果只删除某些元素,则需要确保仅为未删除的元素增加索引。模式类似于
int i = 0;
while (i < list.size()) {
... any other computation you need to perform
if ...you need to remove the element... {
list.remove(i);
} else {
i++;
}
}
就像我说的那样,我还没有尝试过运行你的程序,但看起来这可能是错误。