[英]Remove all elements from array in Java
我懷疑是否要刪除Java
對象array
中所有元素的number
, 不建議使用ArrayList ,該方法有效,只是因為它不會消除某些元素而使某些元素被修改,因為它們在數組中的位置
class
包
public class Pack {
static int nextNumber = 0;
int number;
String name;
public Pack(String name) {
this.number = ++nextNumber;
this.name = name;
}
@Override
public String toString() {
return "Pack ID:" + number + " - Name: " + name;
}
}
class
容器
class Container {
static int nextNumber = 0;
int number;
int qtPack;
Pack[] packs;
public Container() {
this.number = ++nextNumber;
this.qtPack = 0;
this.packs = new Pack[10];
}
public boolean addPack(Pack pack) {
packs[qtPack] = pack;
qtPack++;
return true;
}
public Pack removePack(int numberPack) {
int idx;
Pack removePack = null;
idx = indexOfPackByID(numberPack);
if (idx != -1) {
removePack = packs[idx];
if (removePack != null) {
for (int i = idx; i < qtPack - 1; i++) {
packs[i] = packs[i + 1];
}
qtPack--;
}
}
return removePack;
}
private int indexOfPackByID(int numberPack) {
for (int i = 0; i < qtPack; i++) {
if ((packs[i] != null)
&& (packs[i].number == numberPack)) {
return i;
}
}
return -1;
}
}
主 class
public class Main {
public static void main(String[] args) {
Pack[] packs = new Pack[5];
packs[0] = new Pack("A");
packs[1] = new Pack("B");
packs[2] = new Pack("C");
packs[3] = new Pack("D");
packs[4] = new Pack("E");
Container container = new Container();
for (int i = 0; i < packs.length; i++) {
container.addPack(packs[i]);
}
System.out.println("--- PACK IN CONTAINER ---");
for (int i = 0; i < container.qtPack; i++) {
System.out.println(container.packs[i].toString());
}
System.out.println("\n--- REMOVE PACK ---");
for (int i = 0; i < container.qtPack; i++) {
Pack pack = container.removePack(container.packs[i].number);
System.out.println("Remove " + pack.name+" - ID: "+pack.number);
}
}
}
Main
的輸出
--- PACK IN CONTAINER ---
Pack ID:1 - Name: A
Pack ID:2 - Name: B
Pack ID:3 - Name: C
Pack ID:4 - Name: D
Pack ID:5 - Name: E
--- REMOVE PACK ---
Remove A - ID: 1
Remove C - ID: 3
Remove E - ID: 5
有什么建議嗎?
仔細看看Container.removePack()
for (int i = idx; i < qtPack - 1; i++) {
packs[i] = packs[i + 1];
}
每次調用removePack()
所述container
的引用的一些元件packs[]
到“下一個” Pack
。 因此,packs []在removePack()
之后是removePack()
。
您可以從最后刪除它們...
for (int i = container.qtPack-1; i >= 0; i--) {
Pack pack = container.removePack(container.packs[i].number);
System.out.println("Remove " + pack.name+" - ID: "+pack.number);
}
...或始終刪除第一個元素:
int count = container.qtPack;
for (int i = 0; i < count; i++) {
Pack pack = container.removePack(container.packs[0].number);
System.out.println("Remove " + pack.name+" - ID: "+pack.number);
}
這是因為通過更改數組,您每次迭代都會更改條件(此處為container.packs
和container.qtPack
)。 請記住,每次迭代都會評估循環條件i < container.qtPack
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.