Sie müssen einen Index verwenden, der auf die Größe des Arrays beschränkt ist. Genauer gesagt, und esoterisch gesprochen, müssen Sie die For-Loop-Iterationen {0..9} den gültigen Indizes für das Flammen-Array {0 .. flames.length()-1
} zuordnen, die in diesem Fall dieselben sind wie { 0..5}.
Wenn die Schleife von 0 bis 5 durchlaufen wird, ist das Mapping trivial. Wenn die Schleife ein sechstes Mal iteriert, müssen Sie sie wieder dem Array-Index 0 zuordnen, wenn sie zum siebten Mal durchlaufen wird, ordnen Sie sie dem Array-Index 1 zu usw.
== Naive Art ==
%Vor%== Ein passenderer Weg ==
Dann können Sie dies verfeinern, indem Sie erkennen, dass flames.length()
eine Invariante ist, die Sie aus einer for-Schleife entfernen.
== Wie man es macht ==
Nun, wenn Sie aufmerksam sind, können Sie sehen, dass wir nur modulare Arithmetik im Index machen. Also, wenn wir den modularen (%) Operator verwenden, können wir Ihren Code vereinfachen:
%Vor%Wenn Sie mit solchen Problemen arbeiten, denken Sie über Funktionszuordnungen von einer Domäne (in diesem Fall für Schleifeniterationen) an einen Bereich (gültige Arrayindizes) nach.
Noch wichtiger ist, dass Sie es auf Papier ausarbeiten, bevor Sie überhaupt anfangen zu programmieren. Das wird Sie bei der Lösung dieser elementaren Probleme sehr weit bringen.
Während luis.espinal eine Antwort auf die Leistung gibt, ist es besser, ich denke, sollte man auch nehmen ein Blick in Iterator , da sie Ihnen mehr geben Flexibilität Lesen hin und her.
Das bedeutet, dass Sie genauso einfach FLAMESFLAMES
als FLAMESSEMALF
schreiben könnten, etc ...
Aus Neugier, diese Schleife 1M mal (durchschnittliches Ergebnis von 100 Samples) zu machen, braucht man:
%Vor%Bearbeiten: Cycle-Iteratoren, wie lbalazscs schön ausgedrückt haben, sind noch eleganter. Sie haben einen Preis und die Guava-Implementierung ist viermal langsamer. Sie könnten Ihre eigene Implementierung durchführen, zäh.
%Vor%So würde ich das machen:
%Vor%Die textLoop-Methode:
%Vor% BEARBEITEN: Fehler im Code gefunden ( idx
muss außerhalb der Schleife initialisiert werden). Es ist jetzt behoben. Ich habe es auch in eine separate Funktion umgestaltet.