请帮我处理我的代码。我正在使用名为tempAns的arraylist,它包含值[2,9,2]。我已经尝试添加最后两个数字,然后用正确的答案替换它们,结果将是[2,11]。但不知何故,输出总是[9,11]。好像它正在删除重复的值。
else if(scan.equals("+"))
{
double num2 = Double.parseDouble(tempAns.get(tempAns.size()-1));
double num1 = Double.parseDouble(tempAns.get(tempAns.size()-2));
double ans = num1 + num2;
String stringAns = Double.toString(ans);
System.out.println("before deleting: " +tempAns + "\n");
tempAns.remove(tempAns.get(tempAns.size()-1));
tempAns.remove(tempAns.get(tempAns.size()-1));
System.out.println("before adding: " +tempAns);
tempAns.add(stringAns);
System.out.println(num1 + " + " +num2+ " = " +ans);
System.out.println("after deleting: " +tempAns + "\n");
}
答案 0 :(得分:4)
remove()
方法使用equals()
方法查找应删除的对象。然后
tempAns.remove(tempAns.get(tempAns.size()-1));
装置
tempAns.remove(2);
第一个元素与等号匹配,列表为[9, 2]
。然后,再次呼叫tempAns.remove(tempAns.get(tempAns.size()-1));
,将删除其他2
,该列表将为[9]
。
您可以使用remove(index)
方法或使用LinkedList
代替ArrayList
,并调用removeLast()
方法两次。
答案 1 :(得分:1)
tempAns.remove(tempAns.get(tempAns.size()-1));
//above remove is evaluated to
tempAns.remove(2); // Removes the 2 at index 0
问题是,您首先在索引2处获取值...即2。
现在您要删除值2,这实际上删除了索引0处的2
..
您应该通过索引删除: -
tempAns.remove(tempAns.size()-1);
答案 2 :(得分:1)
tempAns.remove(tempAns.get(tempAns.size()-1)); You shold do below
tempAns.remove(tempAns.size()-1); //remove last
tempAns.remove(tempAns.size()-1); //remove second last
原因tempAns.get(tempAns.size()-1)
返回2
,这也是一开始,所以删除会在开始时删除2
。
public boolean remove(Object o)
从此列表中删除指定元素的第一个匹配项(如果存在)。如果列表不包含该元素,则不会更改。更正式地,删除具有最低索引i的元素,使得(o == null?get(i)== null:o.equals(get(i)))(如果存在这样的元素)。如果此列表包含指定的元素,则返回true(或等效地,如果此列表因调用而更改)。
答案 3 :(得分:1)
使用tempAns.remove(tempAns.size()-1)
代替tempAns.remove(tempAns.get(tempAns.size()-1));
答案 4 :(得分:1)
问题是您在使用时使用了从AbstractCollection中继承的remove方法:tempAns.remove(tempAns.get(tempAns.size()-1));
。根据您的描述,您需要从ArrayList中删除,即使用索引,因此您应该将调用更改为:tempAns.remove(tempAns.size()-1);
答案 5 :(得分:1)
要考虑的一件事是,您可以合并检索num1和num2的位置以及删除它们的位置:
System.out.println("before deleting: " +tempAns + "\n");
double num2 = Double.parseDouble(tempAns.remove(tempAns.size()-1));
double num1 = Double.parseDouble(tempAns.remove(tempAns.size()-1));
double ans = num1 + num2;
String stringAns = Double.toString(ans);
System.out.println("before adding: " +tempAns);
tempAns.add(stringAns);
System.out.println(num1 + " + " +num2+ " = " +ans);
System.out.println("after deleting: " +tempAns + "\n");
之前的代码修复了您遇到的问题,可能更容易理解,因为您没有尝试跟踪项目在列表中的偏移量。这更接近于从堆栈中弹出列表,然后在计算值时将其推回。