arraylist重复值

时间:2012-10-05 17:57:56

标签: java arrays arraylist

请帮我处理我的代码。我正在使用名为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");
            }

6 个答案:

答案 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");

之前的代码修复了您遇到的问题,可能更容易理解,因为您没有尝试跟踪项目在列表中的偏移量。这更接近于从堆栈中弹出列表,然后在计算值时将其推回。