Dies ist eine alte Version des Dokuments!
Tag 6: Laternenfische, viele Laternenfische
Aufgabenteil 1
Für den Teil 1 kann man es mit einer Modellierung wie der folgenden versuchen:
Einige Tipps für diesen Ansatz:
- Die
lanternFish
-Objekte können innerhalb vonday6
in einer ArrayList verwaltet werden:ArrayList<lanternFish> fishList = new ArrayList<>();
- Die
lanternFish
-Objekte können eine Methode wiemakeTimeStep
haben, die einen Zeitschritt auf dem Fish implementiert. Hier fließen die Rahmenbedingungen der Aufgabenstellung ein. Neue Fische könnten an eine ArrayList mit neuen Fischen angehängt werden, die nachdem alle Objekte derfishList
bearbeitet wurden an diefishList
angehängt werden.
Damit kann man Teil 1 lösen, der Ansatz fällt einem aber in Teil 2 laufzeitmäßig auf die Füße, da die Zahl der lanternFish
-Objekte in der Array List sehr schnell wächst.
++ Codegerüst für diesen Ansatz
public int partOne(int daysToSimulate) { int numFish = 0; parseInputToFishList(); ArrayList<lanternFish> tempfishList = new ArrayList<>(fishList); for(int day=0;day<daysToSimulate; day++) { int dayNum=day+1; System.out.print("Day " + dayNum + ":"); Iterator<lanternFish> fishIterator = fishList.iterator(); while(fishIterator.hasNext()) { lanternFish f = fishIterator.next(); // Laesst den Fisch altern und fügt ein mögliches Kind // an die tempfishList an f.makeTimeStep(tempfishList); } fishList.clear(); fishList = (ArrayList<lanternFish>) tempfishList.clone(); //System.out.print(fishList); numFish = fishList.size(); System.out.println(" There are " + numFish + " fish in the sea"); } return numFish; }