Я делаю игру в кости для android, и у меня есть этот цикл, который заполняет массив пронумерованными, свернутыми в рулоне "j". Так оно и было.
int[] rolls = new int[6];
for (int j : rolls) {
rolls[j] = (int) (Math.random() * 5);
rolls[j]++;
Log.i(getClass().getName(), "Rolls[" + j + "] = " + rolls[j]);
}
За исключением вывода (в этом файле журнала)
Rolls[0] = 4
Rolls[0] = 2
Rolls[0] = 3
Rolls[0] = 6
Rolls[0] = 3
Rolls[0] = 4
И когда я меняю код на
int[] rolls = new int[6];
for (int j = 0; j < rolls.length ; j++) {
rolls[j] = (int) (Math.random() * 5);
rolls[j]++;
Log.i(getClass().getName(), "Rolls[" + j + "] = " + rolls[j]);
}
вывод правильный
Rolls[0] = 4
Rolls[1] = 2
Rolls[2] = 3
Rolls[3] = 6
Rolls[4] = 3
Rolls[5] = 4
Я должен что-то делать глупо.
Заявление:
for (int j : rolls)
Итерации по элементам в rolls
, а не индексы. Поскольку массивы инициализируются до 0 в Java, значение j
равно нулю для каждой из 6 итераций.
В первом случае j
будет начальным значением каждого элемента массива. В этом случае все они равны 0, по умолчанию.
for (int j : rolls) {
Когда вы создаете новый массив, значение числа в рулонах равно 0.
Когда вы используете расширенный цикл for над массивом, у вас нет информации об индексе.
Вы гарантированно итерации, потому что, если вы сами отслеживаете это, вы можете это сделать. Но, не делая этого, у вас нет информации об этом.