2017-01-08 5 views
0

ich von number in array von Objekten in Java Zweifel haben alle Elemente löschen, es nicht Arraylist, die Methode funktioniert die Verwendung empfohlen werden, sondern nur, dass sie nicht beseitigt einige Elemente einige Elemente verlassen modifiziert, die aufgrund ihrer Positionen im ArrayEntfernen Sie alle Elemente aus dem Array in Java

classPackung

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; 
    } 
} 

classContainer

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; 
    } 
} 

classHaupt

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); 
     } 
    } 
} 

die Ausgabe von 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 

jede Anregung?

Antwort

1

Sie sie entweder vom Ende entfernen konnte ...

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); 
    } 

... oder immer das erste Element entfernen:

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); 
    } 

Dies liegt daran, durch das Array Ändern Sie das ändern Bedingung (hier container.packs und container.qtPack) mit jeder Iteration. Beachten Sie, dass die Schleifenbedingung i < container.qtPack für jede Iteration ausgewertet wird.

+0

danke, es funktioniert perfekt und manchmal machen die kleinen Details große Unterschiede. –

1

Werfen Sie einen genaueren Blick auf Container.removePack()

for (int i = idx; i < qtPack - 1; i++) { 
    packs[i] = packs[i + 1]; 
} 

Jedes Mal removePack() aufrufen, die container Referenzen einige Elemente packs[] auf die 'nächste' Pack. Die Pakete [] sind also nicht gleich nach removePack().

Verwandte Themen