如何将阵列的一部分移到前面?

时间:2013-12-16 03:03:45

标签: java

所以我不得不使用一个数组来将Aliens添加到我的程序中,现在我应该将所有“null”的部分移到前面,所以不要打印外星人1:等等等等,外星人2: null,Alien 3:null,Alien 4 blah blah,我需要它有Alien 1 blah blah,Alien 2 blah blah。

我知道如何在数组列表中执行删除功能,但我不知道如何通过一个简单的数组来解决这个问题。

public void consolidate() {
    for (int index = 0; index < cockpitCrew.length; index++) {
        if (cockpitCrew[index] == null) {

        }
    }
}

这是我到目前为止用于“删除”空数组对象的代码。

编辑:基本上我需要它在这个循环中打印出来时跳过空值

4 个答案:

答案 0 :(得分:2)

在if语句中,你只需要找到从那个位置开始的第一个非null数组元素(你需要一个循环),然后写一些代码来交换那些元素的位置。

如果找不到非null数组元素,则可以安全地终止循环。

答案 1 :(得分:1)

您可以做的一件事是创建另一个数组并将对象添加到它。 保持两个索引的后部和前部。遇到空对象时,将其添加到rear,当遇到非空对象时,将其添加到front。因此,最后你将在数组的后面有空对象,而不是数组前面的空对象。

public void consolidate() {
    Alien newAlienArray[] = new Alien[cockpitCrew.length];
    int front = 0;
    int rear = cockpitCrew.length - 1;
    for (int index = 0; index < cockpitCrew.length; index++) {
        if (cockpitCrew[index] == null) {
            newAlienArray[rear] = cockpitCrew[index];
            rear--;
        } else {
            newAlienArray[front] = cockpitCrew[index];
            front++;
        }
    }
    cockpitCrew = newAlienArray;// if you finally need to replace the new order in cockpitCrew
}

答案 2 :(得分:0)

我不太了解你的方法,但这是我如何解决这个问题...

// Make it static, let's not rewrite the Array in place...
public static Alien[] consolidate(Alien[] cockpitCrew) {
  List<Alien> al = new ArrayList<Alien>(); // Create a List to hold the Alien(s).
  for (Alien alien : cockpitCrew) {        // Use a for-each loop over the cockpitCrew.
    if (alien != null) {                   // Test for null.
      al.add(alien);
    }
  }
  return al.toArray(new Alien[al.size()]); // Return a new Array.
}

答案 3 :(得分:0)

有不同的方法可以解决这个问题:

  • 您可以使用相同的阵列
    在同一个数组中类似于“冒泡排序”,如果“cockpitCrew [index] == null”用下一个数组元素更改它,为此你可以使用2个索引。当前元素的第一个索引e下一个和最终交换变量的第二个索引。

  • 您可以使用2个不同的阵列
    这是非常简单的方法,如果(cockpitCrew [index]&lt;&gt; null),你在第一个数组中复制这个元素(不是null),否则“cockpitCrew [index] == null”将它复制到第二个数组。

我认为这不是很困难。