我有这个方法标题:
public boolean remove(Object anObject)
{....}
我需要方法的主体,以从int
数组中删除指定元素的首次出现,并将数组中的其余元素向左移动。我已经考虑过要开始
for (int i = 0; i < arr.length; i++) {
if (arr[i] == anObject)
}
,但是这没有按预期方式工作。 任何帮助都会很棒,谢谢!
答案 0 :(得分:0)
我为您提供解决方案。使用for循环,该循环将所有数组数据运行并将其移位一个。
以原始代码为基础:
for (int i = 0; i < arr.length-1; i++) {
if (arr[i].equals(anObject)){
for (int k = i; k < arr.length; k++){ //starts replacing ON the duplicate value
arr[k] = arr[k+1]; //replaces the value with the 1 higher one; aka moving all your array values left
}
}
就像@camickr所说的那样:
您需要使用stringName.equals(Object);比较字符串,因为它们是非基本数据类型。
希望这会有所帮助。祝你好运。
答案 1 :(得分:-1)
正如camickr所提到的,通过使用ArrayList可以很容易地完成您要实现的目标。总体而言,通常可以将对对象使用ArrayList视为更好的做法。
只需声明一个您正在使用的对象类型的ArrayList,并通过使用添加和删除该对象的实例
myArrayList.add(object);
myArrayList.remove(index);
答案 2 :(得分:-1)
这里的解决方案仅使用真正的对象数组,而不使用任何Java集合。伪代码的工作原理如下:
anObject
的相等性。 null
。我提供了一些额外的代码,这些代码对于您的分配不是必需的,但可以帮助您直观地了解该方法在数组上的工作方式:
public class ArrayMethodTester {
private Object[] array = {3, 5, 1, 6, 8, 7, 0, 9, 2, 4};
public static void main(String[] args) {
ArrayMethodTester testArray = new ArrayMethodTester();
testArray.printArray();
testArray.remove(7);
testArray.printArray();
}
public boolean remove(Object anObject) {
for (int i = 0; i < array.length; i++) {
if(array[i].equals(anObject)) {
for (int j = i; j < array.length - 1; j++) {
array[j] = array[j + 1];
}
array[array.length - 1] = null;
return true;
}
}
return false;
}
private void printArray() {
System.out.printf("[%s", array[0]);
for (int i = 1; i < array.length; i++) {
System.out.printf(",%s", array[i]);
}
System.out.println("]");
}
}
答案 3 :(得分:-2)
但是我知道这不会给我答案
if (arr[i] == anObject)
您不应该使用“ ==”进行对象比较。
if (arr[i].equals(anObject))
相反,您应该使用equals(..)
方法。
然后,一旦您知道要删除的项目的索引。因此,现在您只需要将下一项复制到该索引,然后重复进行直到到达数组末尾。然后将最后一项设置为null,以指示不存在任何值。