簡體   English   中英

從Java中的數組中刪除所有元素

[英]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.packscontainer.qtPack )。 請記住,每次迭代都會評估循環條件i < container.qtPack

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM