<JAVA> Problem mit ArrayList

  • Hey Leute,

    bräuchte euren professionellen Rat bei folgendem Problem:

    Ich habe Array-Lists erzeugt, um beim Initialisieren von Objekten Objekte gleicher Art zusammenzufassen, wobei die Zuordnung zu einer bestimmten Array-List abhängig von einer objektspezifischen ID ist. Der Quellcode schaut folgendermaßen aus:

    ArrayList <Inventories> hardware=new ArrayList<Inventories>(100);
    ArrayList <Inventories> software=new ArrayList<Inventories>(100);

    // Constructor for item
    public Inventories (int ID, String description) {
    this.ID=ID;
    this.description=description;


    //add item to Inventory Group
    if (this.ID>=1&this.ID<=10) {
    //ensure capacity for ArrayList
    for (int i = 0; i <= 100; i++)
    hardware.add(null);
    hardware.add(this.ID,this);
    }

    else if (this.ID>=11&this.ID<=20) {
    //ensure capacity for ArrayList
    for (int i = 0; i <= 100; i++)
    software.add(null);
    software.add(this.ID,this);

    Mit einer weiteren Methode definiere ich eine Schnittstelle, um produktspezifische Informationen aus der ArrayList abzurufen:

    public void getProductInformation(int ID){
    if (ID>=1&ID<=10) {
    String productinfo1= hardware.get(ID).description.toString();
    System.out.println("The procuct wearing ID number " + ID + " is a " + productinfo1);

    }

    else if (ID>=11&ID<=20) {
    String productinfo1= hardware.get(ID).description.toString();
    System.out.println("The procuct wearing ID number " + ID + " is a " + productinfo1);
    }

    }

    In der main-Klasse lassen sich Informationen aus der ArrayList "Hardware" problemlos abrufen, erzeuge ich allerdings ein Objekt mit einer ID größer 10 und will ich die produktspezifischen Informationen aus der Array-List "Software" abfragen, so wird folgende Exception getriggered:

    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 00

    at java.util.ArrayList.RangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at Warehouse.Inventories.getProductInformation(Inventories.java:61)

    Kann mir jemand von euch vielleicht erklären, weshalb sich das Programm hier unterschiedlich verhält, obwohl beide ArrayLists und auch die Schnittstellen zu den abgespeicherten Informationen ident definiert wurden?

    Vielen Dank für euer Hilfe und beste Grüße,

    Alex

  • mit hardware.add(null) bzw. software.add(null) fügst du am anfang 100x null zu jeder liste hinzu.
    get(ID) liefert dann das element an index ID zurück (nicht das item mit der entsprechenden ID!), was für ID <= 99 also null ist, wenn kein element vorhanden ist - und genau das passiert, wenn du unten aus der hardware-liste versuchst IDs > 10 heauszuholen.
    du solltest das ganze nochmal gut überarbeiten.

    edit:
    bei dem was du machen willst, solltest du vielleicht eher eine Map<Integer, Inventories> verwenden.
    ansonsten: wozu 2 listen, wenn in einer sowieso nur ids < 10 und in der andern ids > 10 drin stehen?
    oh, und noch was: bei jedem neuen item weden deine listen um 100 vergrößert!

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    &#128513;&#128514;&#128515;&#128516;&#128517;&#128518;&#128519;&#128520;&#128521;&#128522;&#128523;&#128524;&#128525;&#128526;&#128527;&#128528;&#128530;&#128531;&#128532;&#128534;&#128536;&#128538;&#128540;&#128542;&#128544;&#128545;&#128546;&#128547;&#128549;&#128552;&#128553;&#128554;&#128555;&#128557;&#128560;&#128561;&#128562;&#128563;&#128565;&#128566;&#128567;

    3 Mal editiert, zuletzt von sutupud (17. Oktober 2010 um 12:03)

  • Solltest noch beachten, dass du vorm Erzeugen des Objekts prüfen solltest, ob die Id bereits existiert, weil Sie im Falle der Nutzung einer Map unique sein sollten (außer du möchtest den dazugehörigen Wert überschreiben).

    Alternative Herangehensweise für die Nutzung der Listen (wenn du unbedingt 2 Listen haben willst, ausreichend wäre wohl 1) wäre ja ganz normales Hinzufügen und folgende Suche (berücksichtigt nicht mehrfach vorhandene IDs, falls sie nicht unique sein sollten!):

    12 Mal editiert, zuletzt von polymorph10 (17. Oktober 2010 um 13:56)

  • Danke für eure Inputs, habe nun eine für meine Prolemstellung geeignete Technik gefunden - die ArrayList war sicher nicht das optimalste Werkzeug für meine Anforderungen!!

    also dann, danke für eure hilfe!
    cheers,
    alex

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!