所以我不得不使用一个数组来将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) {
}
}
}
这是我到目前为止用于“删除”空数组对象的代码。
编辑:基本上我需要它在这个循环中打印出来时跳过空值
答案 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”将它复制到第二个数组。
我认为这不是很困难。