2015-03-23 10 views
5

ponieważ nie ma tam dostępnego licznika lub i, aby zresetować go do zera.Czy możesz zresetować licznik pętli for-each Loop?

Czy istnieje sposób, aby się bawić z continue lub break, aby to osiągnąć?

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

Dlaczego nie używać zwykłej pętli? –

+0

Zostałem poproszony o napisanie algorytmu sortowania za pomocą pętli for-each – James

+0

Czy możesz wybrać algorytm sortowania? – dhke

Odpowiedz

2

Generalnie, nie ma na to sposobem: iterator, który jest używany do „drive” pętla for-each jest ukryty, więc Twój kod nie ma do niego dostępu.

Oczywiście można utworzyć klasę podobną do kolekcji, która zachowuje odniesienia do wszystkich tworzonych przez nią iteratorów, i umożliwia resetowanie "z boku". Jednak to kwalifikuje się jako hack i należy go unikać.

Jeśli potrzebujesz sposobu na zresetowanie pozycji swojej iteracji do określonej lokalizacji, użyj zwykłej pętli for.

1

Nie, dla każdej pętli wewnętrznie nie jest używany żaden licznik. Dlatego wystarczy użyć zwykłej pętli jak:

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

Więcej informacji: Is there a way to access an iteration-counter in Java's for-each loop?

+0

Proszę, nie nazywaj tego 'myArray' kiedy to w rzeczywistości jest' kolekcją'. To trochę zagmatwane. – dhke

+1

Dzięki za podpowiedź, poprawiono. – flogy