繁体   English   中英

为什么我的Arraylist继续打印[3,2]?

[英]Why does my Arraylist keep printing [3,2]?

我正在尝试从整数数组中删除值的每个实例,并返回新整数数组的长度。输入为[3,2,2,3],val为3。输出应为[ 2,2],长度为2。我一直得到[3,2],但是我正在通过数组删除val。

    class Solution {
        public int removeElement(int[] nums, int val) {

            ArrayList<Integer> list = new ArrayList<Integer>(); 

            for(int i = 0; i < nums.length; i++) {
            list.add(nums[i]);
            }

            if(list.isEmpty()) {
            return 0;
            }

            for(int i = 0; i < list.size(); i++) {
                if(list.get(i) == val) {
                list.remove(i);
                }
            }
            return list.size();
        }
   }

当您删除前三个时,您将拥有i = 0,下一个数组列表将调整大小,因此删除时,您需要执行i--。

class Solution {
        public int removeElement(int[] nums, int val) {

            ArrayList<Integer> list = new ArrayList<Integer>(); 

            for(int i = 0; i < nums.length; i++) {
            list.add(nums[i]);
            }

            if(list.isEmpty()) {
            return 0;
            }

            for(int i = 0; i < list.size(); i++) {
                if(list.get(i) == val) {
                list.remove(i);
                i--;
                }
            }
            return list.size();
        }
   }

您还没有表现出任何的印刷代码,但我认为你打印nums基于此方法返回的数量。 这意味着你永远不会改变nums以任何方式,只是从那里打印的第n个数字。 您需要返回修改后的数组,而不仅仅是返回长度。

您根本不需要调用remove(虽然像您一样进行删除,也可以,但是例如,如果您在一个foreach周期中执行此操作,则会在ConcurrentModificationException崩溃。相反,您可以确定是否将项目添加到结果列表或不在第一个for循环内(我认为这更安全):

ArrayList<Integer> list = new ArrayList<Integer>(); 
for(int i = 0; i < nums.length; i++) {
    if (nums[i] != val) {
        list.add(nums[i]);
    }
}
return list.size();

(我知道这不能直接回答您的问题)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM