2015-03-23 16 views
5

da gibt es keinen zugänglichen Zähler oder i dort, um auf Null zurückzusetzen.Können Sie den Zähler eines for-each Loop zurücksetzen?

Gibt es eine Möglichkeit, mit continue oder break zu spielen, um das zu erreichen?

class CommandLine { 
    public int[] sort(int array[]) { 
    int temp; 
    for (int i=0; i<array.length-1; i++) {//must have used for-each 
      if (array[i] > array[i+1]){ 

       temp = array[i]; 
       array[i] = array[i+1]; 
       array[i+1] = temp; 
       i=-1; 

      }//if end 
    }//for end 

    return array; 

    }//main end 
}//class end 
+3

Warum nicht eine normale Schleife verwenden? –

+0

Ich wurde gebeten, einen Sortieralgorithmus mit einer for-each-Schleife zu schreiben. – James

+0

Können Sie den Sortieralgorithmus frei wählen? – dhke

Antwort

2

Im Allgemeinen gibt es keine Möglichkeit, dies zu tun: das Iterator, der verwendet wird, um „Drive“ die for-each Schleife verborgen ist, so Ihr Code hat keinen Zugriff darauf.

Natürlich könnten Sie eine Sammlung ähnliche Klasse erstellen, die Verweise auf alle Iteratoren, die es erstellt, behält und Sie können einen Reset "auf der Seite" tun. Dies gilt jedoch als Hack und sollte vermieden werden.

Wenn Sie eine Möglichkeit zum Zurücksetzen der Position Ihrer Iteration an einem bestimmten Ort benötigen, verwenden Sie eine normale for-Schleife.

1

Nein, die für jede Schleife verwendet intern keinen Zähler. Verwenden Sie daher nur eine übliche Schleife wie:

for (int i = 0; i < myCollection.size(); i ++) { 
    // do something 
} 

Weitere Informationen: Is there a way to access an iteration-counter in Java's for-each loop?

+0

Bitte nennen Sie es nicht "myArray", wenn es tatsächlich eine 'Collection' ist. Das ist etwas verwirrend. – dhke

+1

Danke für den Hinweis, behoben. – flogy