Java 如何为自定义ArrayList实现deleteValues(int-values)方法?
我在数组的帮助下实现了我的自定义整数ArrayList类,我希望能够从数组中删除某个值。我的问题是,当有许多相同的可删除值相邻时,我会得到两个0相邻,这会导致一个bug。我花了几个小时试图解决这个问题,但运气不好。这是我的密码: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
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;
}