将一个方法void removeFirst(int newVal)添加到IntegerList类,该类从列表中删除第一次出现的值。如果值没有出现在列表中,它应该什么也不做(但这不是错误)。删除项目不应该更改数组的大小,但请注意,数组值确实需要保持连续,因此当您删除值时,您必须将其后的所有内容移动以填充其空间。还记得减少跟踪元素数量的变量。
请帮助,我已经尝试了本网站上列出的所有其他解决方案,“关于从阵列中删除一个元素”,但没有一个有效。
答案 0 :(得分:1)
此方法支持与Collection.remove()相同的功能,这是ArrayList删除第一个匹配元素的方式。
public boolean remove(int n) {
for (int i = 0; i < size; i++) {
if (array[i] != n) continue;
size--;
System.arraycopy(array, i + 1, array, i, size - i);
return true;
}
return false;
}
我建议您不要自己编写此代码,而是查看Trove4J的TIntArrayList
,它是int[]
的包装器。您还可以读取ArrayList的代码以查看它是如何编写的。
答案 1 :(得分:0)
你可以这样做:
int count; //No of elements in the array
for(i=0;i<count;i++)
{
if(Array[i]==element )
{
swap(Array,i,count);
if(count)
--count;
break;
}
}
int swap(int Array[],int i,int count)
{
int j;
for(j=i;j<=count-i;j++)
a[i]=a[i+1];
}
这不是完整实现。您必须创建一个类并执行此操作。
答案 2 :(得分:0)
使用下面的方法
public static <TypeOfObject> TypeOfObject[] removeFirst(TypeOfObject[] array, TypeOfObject valueToRemove) {
TypeOfObject[] result = Arrays.copyOf(array, array.length - 1);
List<TypeOfObject> tempList = new ArrayList<>();
tempList.addAll(Arrays.asList(array));
tempList.remove(valueToRemove);
return tempList.toArray(result);
}
客户端可以通过调用下面的JUnit测试中演示的方法来删除任何数组的第一个元素。
@Test
public void removeFirstTest() {
// Given
Integer valToRemove = 5;
Integer[] input = {1,2,3,valToRemove,4,valToRemove,6,7,8,9};
Integer[] expected = {1,2,3,4,valToRemove,6,7,8,9};
// When
Integer[] actual = removeFirst(input, valToRemove);
System.out.println(Arrays.toString(actual));
// Then
Assert.assertEquals(expected, actual);
}