2015-03-23 4 views
5

так как нет доступного счетчика или i там, чтобы сбросить до нуля.Можете ли вы сбросить счетчик для каждого цикла?

есть ли способ поиграть с continue или break, чтобы достичь этого?

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

Почему бы не использовать обычный цикл? –

+0

Меня попросили написать алгоритм сортировки с циклом for-each – James

+0

Вы можете выбрать алгоритм сортировки? – dhke

ответ

2

Вообще, нет никакого способа сделать это: итератор, который используется для «диск» петля for-each скрыта, так ваш код не имеет к нему доступа.

Конечно, вы можете создать класс, подобный коллекции, который будет ссылаться на все итераторы, которые он создает, и позволяет выполнить сброс «сбоку». Однако это квалифицируется как взлом, и его следует избегать.

Если вам нужен способ сбросить позицию вашей итерации обратно в определенное место, используйте обычный цикл for.

1

Нет, для каждого цикла внутренне не используется счетчик. Поэтому, просто использовать обычный цикл вроде:

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

Дополнительная информация: Is there a way to access an iteration-counter in Java's for-each loop?

+0

Пожалуйста, не называйте это 'myArray', когда это на самом деле' Collection'. Это несколько сбивает с толку. – dhke

+1

Спасибо за подсказку, исправил ее. – flogy

Смежные вопросы