Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
/** * Vergleicht die beiden Farbcodes. * Stimmt die Farbe exakt überein, wird eine 1 in die liste eingetragen. * Stimmt die Farbe überein, aber hat die falsche Position, wird eine 2 geschrieben. * Eine 0 wird geschrieben, falls die Farbe nicht vorkommt. */ private void Compare() { int blacks = 0; int whites = 0; ArrayList<Integer> guessList = new ArrayList<Integer>(); ArrayList<Integer> resultList = new ArrayList<Integer>(); //Hinzufuegen der Elemente zu den Listen for (int i = 0; i < size; i++) { guessList.add(guess.Pins()[i].getColor()); resultList.add(result.getPinAt(i).getColor()); } //Schwarze Pins for (int i = 0; i < size; i++) { if (guessList.get(i) == resultList.get(i)) { blacks++; guessList.set(i, null); resultList.set(i, null); hints.add(1); } } //Weisse Pins for (int i = 0; i < size; i++) { if (resultList.get(i) != null) for (int j = 0; j < size; j++) { if (resultList.get(i) == guessList.get(j)) { guessList.set(j, null); whites++; hints.add(2); break; } } } blackPegs = blacks; whitePegs = whites; } |
In einem vorrigen Post habe ich dir einen Link zu einem Beispiel mit einer LinkedList gezeigt. Ersetz mal die ArrayList durch eine LinkedList und mess dann mal die Zeit wie in dem Beispiel beschrieben
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Affje« (03.01.2012, 16:49)
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Also die ganzen Schleifen da und die Verwendung der guess und resultList zur Ermittlung der Pins, das ist in der Tat nicht sonderlich performant. Vor allem auch deshalb, weil Du dieses Zeug wohl für jede Kombination auf's Neue machst. Da ist klar, dass Du nicht nur 260.000 Vergleiche machst, sondern 260.000 äußerst ineffiziente Methoden-Aufrufe.
Wozu Du da Listen und keine Arrays verwendest ist mir ebenfalls nicht ganz klar. Du brauchst die Funktionalität von Listen da doch gar nicht.
Werbeanzeige