如何删除int数组中指定元素的第一个首次出现? (java)

时间:2018-08-28 23:51:36

标签: java arrays int

我有这个方法标题:

public boolean remove(Object anObject)
{....}

我需要方法的主体,以从int数组中删除指定元素的首次出现,并将数组中的其余元素向左移动。我已经考虑过要开始

for (int i = 0; i < arr.length; i++) {
     if (arr[i] == anObject) 
 }

,但是这没有按预期方式工作。 任何帮助都会很棒,谢谢!

4 个答案:

答案 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,以指示不存在任何值。