Что не так с этим для цикла?

1

Я делаю игру в кости для 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

Я должен что-то делать глупо.

  • 0
    Спасибо всем за прекрасные ответы (они были такими быстрыми!), Андерсой получает правильный ответ, потому что он ответил первым. Теперь я должен идти читать лекцию моего учителя компьютерных технологий ...
Теги:

3 ответа

8
Лучший ответ

Заявление:

 for (int j : rolls) 

Итерации по элементам в rolls, а не индексы. Поскольку массивы инициализируются до 0 в Java, значение j равно нулю для каждой из 6 итераций.

2

В первом случае j будет начальным значением каждого элемента массива. В этом случае все они равны 0, по умолчанию.

2
for (int j : rolls) {

Когда вы создаете новый массив, значение числа в рулонах равно 0.

Когда вы используете расширенный цикл for над массивом, у вас нет информации об индексе.

Вы гарантированно итерации, потому что, если вы сами отслеживаете это, вы можете это сделать. Но, не делая этого, у вас нет информации об этом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню