Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java arraylist重复值_Java_Arrays_Arraylist - Fatal编程技术网

Java arraylist重复值

Java arraylist重复值,java,arrays,arraylist,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)); d

请帮我写代码。我使用一个名为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");
            }
问题是,您首先要获取索引2处的值。。这是2。 现在您正在删除值2,这实际上删除了索引0处的2

您应该按索引删除:-

tempAns.remove(tempAns.size()-1);
原因是tempAns.gettempAns.size-1返回2,它也在开始处,所以remove将在开始时删除2

从该列表中删除指定元素的第一个匹配项(如果存在)。如果列表不包含该元素,则该元素将保持不变。更正式地说,删除索引i最低的元素,以便o==null?如果存在这样的元素,则geti==null:o.equalsgeti。如果此列表包含指定的元素,则返回true;如果此列表因调用而更改,则返回等效值

remove方法使用equals方法查找应该删除的对象。然后

 tempAns.remove(tempAns.get(tempAns.size()-1));
意味着

第一个元素匹配equals,列表中有[9,2]。然后,调用tempAns.removetempAns.gettempAns.size-1;同样,将删除另外2个,列表将为[9]


您可以使用removeindex方法或使用LinkedList代替ArrayList,并调用removeLast方法两次。

使用tempAns.removetempAns.size-1代替tempAns.removetempAns.gettempAns.size-1

问题在于,在使用tempAns.removetempAns.gettempAns.size-1;时,您使用的是从AbstractCollection继承的remove方法;。根据您的描述,您需要从ArrayList中删除,即使用索引,因此您应该将调用更改为:tempAns.removetempAns.size-1
        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");

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

哦,我明白了。谢谢但我该如何修复它呢?我想删除索引_num@TokuchiToua请看我的答案,您使用的是继承的方法,而不是ArrayList中的方法。非常感谢。我实际上是在使用arraylist进行堆栈。
 tempAns.remove(tempAns.get(tempAns.size()-1));
 tempAns.remove(2);
        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");