1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

<JAVA> Problem mit ArrayList

  • 0326640
  • 17. Oktober 2010 um 11:44
  • Unerledigt
  • 0326640
    3
    0326640
    Mitglied
    Punkte
    95
    Beiträge
    12
    • 17. Oktober 2010 um 11:44
    • #1

    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

  • sutupud
    13
    sutupud
    Mitglied
    Reaktionen
    59
    Punkte
    1.659
    Beiträge
    320
    • 17. Oktober 2010 um 11:53
    • #2

    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)

  • polymorph10
    5
    polymorph10
    Mitglied
    Reaktionen
    20
    Punkte
    270
    Beiträge
    50
    • 17. Oktober 2010 um 13:15
    • #3

    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!):

    Code
    public [size=12][B]static[/B] [/SIZE]void getProductInformation(int ID){ //oder auch String als Rückgabewert und am Aufrufort die Ausgabe erledigen
    ... //wenn id im hardwarebereich
        for(Inventories inv : hardware) //Deklaration: private static List<Inventories> hardware = new ArrayList<Inventories>(100);
        {
           if(inv.ID == ID)
           {
              System.out.println("The procuct wearing ID number " + ID + " is a " + inv.description.toString());
              break; //oder auch return;
           }
        }
    ...
     //sonst suche im softwarebereich
    }
    Alles anzeigen

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

  • 0326640
    3
    0326640
    Mitglied
    Punkte
    95
    Beiträge
    12
    • 17. Oktober 2010 um 14:27
    • #4

    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

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung