Funktionsweise von ArrayList<E>.set(...)

Patneu

Mitglied
Hallo zusammen,

ich habe folgendes Problem und leider über die Suche-Funktion nichts gefunden (weiß auch ehrlich gesagt nicht so richtig, nach was ich suchen müsste):


Ich habe in meinem Programm eine "ShipOrder" - die erweitert ArrayList<E>, überschreibt aber keine vorhanden Methoden, fügt nur einige neue hinzu -, in der sich Elemente einer von mir definierten Klasse "Ship" befinden.

Nun wollte ich eine Methode schreiben, die sieht momentan wie folgt aus:
[JAVA="502"]private void changeAlliedShips(Ship valueShip, Ship changedShip, int number)
{
if(valueShip.equals(changedShip) == false)
{
for(counter1 = 0; counter1 < battleCalculator.getAlliedOrder().size(); counter1 = counter1 + 1)
{
if(battleCalculator.getAlliedOrder().get(counter1).equals(valueShip))
{
battleCalculator.getAlliedOrder().set(counter1, new Ship(changedShip, true));
}
}
}
if(number > 0)
{
battleCalculator.addShips(changedShip, number, "Eigene/Alliierte Schiffe hinzufügen");
}
if(number < 0)
{
battleCalculator.removeShips(changedShip, "" + (-number), "Eigene/Alliierte Schiffe hinzufügen");
}
}[/code]
Anm.: "battleCalculator.getAlliedOrder() liefert die ShipOrder; battleCalculator.addShips(...) und .removeShips(...) fügen Schiffe hinzu bzw. entfernen sie. Ein Iterator<E> wird in der Methode .removeShips(...) benutzt.


Diese Methode kann im Programmablauf mehrmals hintereinander aufgerufen werden (je nachdem wieviele verschiedene Ship-Objekte die ShipOrder enthält) und soll alle Schiffe, die mit "valueShip" equal sind durch neue Ship-Objekte ersetzen, die mit "changedShip" equal sind.

Danach werden ggf. noch weitere Ship-Objekte, die mit changedShip equal sind hinzugefügt bzw. welche entfernt.



Nun zum Problem:

Wenn die Methode nur einmal aufgerufen wird oder nur bei einem Aufruf Ship-Objekte ersetzt werden müssen, klappt scheinbar alles wie es soll.
Wird die Methode aber mehrmals aufgerufen und es müssen auch mehrmals Ship-Objekte ersetzt werden, funktioniert die Methode dem Anschein nach beim ersten Mal wie gewollt; bei allen weiteren Aufrufen scheinen aber weder die Ship-Objekte ersetzt zu werden, noch werden die neuen Ship-Objekte hinzugefügt bzw. entfernt.

Ich habe schon gedacht, es müsste ein ähnliches Problem wie mit der .remove(...)-Methode von ArrayList<E> sein, aber die Iterator<E>-Klasse hat ja keine .set(...)-Methode...



Hat jemand eine Idee, was das Problem sein könnte oder wie ich richtig vorgehen muss? Ich danke schonmal im Voraus für alle Antworten. :) Wenn benötigt kann ich auch gerne noch mehr Code posten, aber das komplette Programm wollte ich niemandem zumuten. :oops:
 
S

SlaterB

Gast
Loggen Loggen Loggen,
damit kann man doch alles so genau prüfen..

schreibe zu Beginn der Methode System.out.println() mit den Parametern,
gehe die Liste durch und logge jedes einzelne Element in der Liste und ob equals true oder false ergibt,
wenn eine Änderung durchgeführt wird, logge die neue Liste zur Überprüfung ob es geklappt hat,

logge schließlich was number am Ende ist,

dann geht es zu den anderen beiden Methoden, logge dort den Methodenbeginn, die Size vor und nach den Änderungen usw.

--

wirklich alles auf der Welt wird dir so auf dem Silbertablett serviert,
warum rätselst du was passiert? schaue dir doch ganz einfach an was passiert!

im Ablauf mit mehreren Aufrufen direkt hintereinander wird dir dann ausgegeben ob es zu Änderungen kommt,
und wenn nicht wirst du sicher erkennen wieso, z.B. weil die beiden Ship-Parameter gleich sind, dann tut sich sicherlich nichts


> bei allen weiteren Aufrufen scheinen aber weder die Ship-Objekte ersetzt zu werden, noch werden die neuen Ship-Objekte hinzugefügt bzw. entfernt.

wie stellst du das eigentlich fest, graphische Darstellung?
wenn auch schon mit System.out.println, dann hast du ja schon erste Schritte,
ob graphisch oder Text, Ausgabe ist Ausgabe, du musst nur mehr mehr mehr ausgeben um immer mehr zu erfahren
 

Patneu

Mitglied
Dummheit muss bestraft werden; ich glaub ich hau jetzt erstmal 10 min meinen Kopf gegen die Wand... :oops::oops::oops::oops::oops:

Das Problem hatte nicht das geringste mit ArrayList zu tun. Ich hätte einfach nur die Variable "counter1" in der Methode selbst nicht benutzen dürfen. Die wurde nämlich schon für die Schleife benutzt, die bestimmt, wie oft die Methode aufgerufen wird. Deshalb wurde die Methode immer nur einmal aufgerufen.

Funktioniert jetzt alles wie es soll, danke. (Wieso gibts hier keinen Kopf-gegen-die-Wand-hau-Smiley?)
 

Ähnliche Java Themen

Neue Themen


Oben