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.
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.