Java 如何为自定义ArrayList实现deleteValues(int-values)方法?

Java 如何为自定义ArrayList实现deleteValues(int-values)方法?,java,arrays,arraylist,Java,Arrays,Arraylist,我在数组的帮助下实现了我的自定义整数ArrayList类,我希望能够从数组中删除某个值。我的问题是,当有许多相同的可删除值相邻时,我会得到两个0相邻,这会导致一个bug。我花了几个小时试图解决这个问题,但运气不好。这是我的密码: int max=10; public int[] a = new int[max]; @Override public void deleteValues(int value) { int tempIndex=0; f

我在数组的帮助下实现了我的自定义整数ArrayList类,我希望能够从数组中删除某个值。我的问题是,当有许多相同的可删除值相邻时,我会得到两个0相邻,这会导致一个bug。我花了几个小时试图解决这个问题,但运气不好。这是我的密码:

    int max=10;
    public int[] a = new int[max];

    @Override
    public void deleteValues(int value) {
    int tempIndex=0;

    for (int i = 0; i <50 ; i++) {
        if (a[tempIndex] == value) {
            a[tempIndex] = a[tempIndex + 1];
            a[tempIndex + 1] = 0;
        } else if (a[tempIndex] == 0) {
            a[tempIndex] = a[tempIndex + 1];
            a[tempIndex + 1] = 0;

        } else {
            tempIndex++;

        }

    }


}
这是运行代码后的错误结果:

[2, 3, 0, 0, 4, 4, 4, 1, 2, 3]
我想要达到的目标:
[2,3,1,2,3,0,0,0,0]


我的问题是:使用尽可能少的循环使代码工作的最佳方法是什么?

代码中的一个问题是,您总是将索引
tempIndex+1
处的元素复制到
tempIndex
:它总是下一个元素。 事实上,在从数组中删除
5
元素后,您必须将
tempIndex+5
复制到
tempIndex

我认为这是一个很好的方法:

public void deleteValues(int[] a, int value) {
    int j=0;
    for(int i=0; i<a.length; i++) {
        if(a[i]!=value) {
            a[j] = a[i];
            j++;
        }   
    }
    // fill the rest of the array with zeros
    while(j<a.length) {
        a[j] = 0;
        j++;
    }   
}   
输出:

a     = {2, 3, 1, 2, 3, 0, 0, 0, 0, 0}

代码中的一个问题是,总是将索引
tempIndex+1
处的元素复制到
tempIndex
:它总是下一个元素。 事实上,在从数组中删除
5
元素后,您必须将
tempIndex+5
复制到
tempIndex

我认为这是一个很好的方法:

public void deleteValues(int[] a, int value) {
    int j=0;
    for(int i=0; i<a.length; i++) {
        if(a[i]!=value) {
            a[j] = a[i];
            j++;
        }   
    }
    // fill the rest of the array with zeros
    while(j<a.length) {
        a[j] = 0;
        j++;
    }   
}   
输出:

a     = {2, 3, 1, 2, 3, 0, 0, 0, 0, 0}
公共静态void deleteValues(int[]a,int-value){
int newSize=a.length;
int电流=0;
for(int i=0;i
公共静态void deleteValues(int[]a,int-value){
int newSize=a.length;
int电流=0;
for(int i=0;i
您可以使用迭代器:

List<Integer> numbers = ....
Iterator<Integer> i = numbers.iterator();
while (i.hasNext()) {
   Integer num = i.next(); 
   // add here your custom code
   i.remove();
}
列表编号=。。。。
迭代器i=数字。迭代器();
while(i.hasNext()){
整数num=i.next();
//在这里添加您的自定义代码
i、 删除();
}
您可以使用迭代器:

List<Integer> numbers = ....
Iterator<Integer> i = numbers.iterator();
while (i.hasNext()) {
   Integer num = i.next(); 
   // add here your custom code
   i.remove();
}
列表编号=。。。。
迭代器i=数字。迭代器();
while(i.hasNext()){
整数num=i.next();
//在这里添加您的自定义代码
i、 删除();
}
int tempIndex,index;
对于(index=0,tempIndex=0;indexint tempIndex,index;
对于(index=0,tempIndex=0;index虽然(TempIndexArrayList
在哪里?什么是
a
?对不起,a是一个数组,我尝试实现我自己的ArrayList类。是否要从数组中删除元素或将其设置为0?是否必须在没有常规ArrayList的情况下生成解决方案?是的。它应该没有常规ArrayList。
ArrayList
在哪里?什么是
a
?很抱歉,a是一个数组,我尝试实现自己的Arraylist类。是否要从数组中删除元素或将其设置为0?是否必须生成一个没有常规Arraylist的解决方案?是的。它应该没有常规Arraylist。
            int tempIndex,index;
            for (index = 0, tempIndex = 0; index < valuesArray.length; index++) {
                if (valuesArray[index] != valToDelete) {
                    valuesArray[tempIndex++]=valuesArray[index];
                }
            }
            while(tempIndex<valuesArray.length){
                valuesArray[tempIndex++]=0;
            }