Я новичок в Java. Я читал какое-то решение вопроса, и я столкнулся с этим:
int[] ps = new int[N];
for (int i = 0; i < N; i++)
ps[i] = input.nextInt();
int[] counts = new int[1005];
for (int p : ps)
counts[p]++;
Что делают последние две строки?
Это цикл для каждого цикла. Он устанавливает p
в первый элемент ps
, затем запускает тело цикла. Затем он устанавливает p
во второй элемент ps
, затем запускает тело цикла. И так далее.
Это примерно соответствует:
for(int k = 0; k < ps.length; k++)
{
int p = ps[k];
counts[p]++;
}
Цикл for-each, введенный в Java5. Он в основном используется для перемещения элементов массива или коллекции. Преимущество для каждого цикла заключается в том, что он исключает возможность ошибок и делает код более удобочитаемым.
Синтаксис
for(data_type variable : array | collection){}
Источник: Java для каждого цикла
В вашем случае этот цикл выполняет итерацию Array
Эквивалентный код без каждой циклы
for (int i=0;i<ps.length;i++){
int p=ps[i];
counts[p]++;
}
p
не является индексом его элементов массива ps
Линия выполняет итерирование по каждому индексу массива, вынимая его значение в последовательности в переменной p
Вы можете проверить
for (int p : ps){ // if ps is {1,2,3}
System.out.print(p+" "); // it will print 1 2 3
counts[p]++;
}
Это цикл for. for (int p: ps)
выполняет итерацию по ints в массиве ps
int
p
располагается в массивеps
. Вы можете немного поиграть с ним, чтобы увидеть, как он работает, например, вывести значениеp
в цикле.