Нет, это невозможно, потому что усиленный цикл for
даст ссылку на текущий элемент. Присвоение нового объекта ссылке не присваивает элемент массиву. Невозможно использовать выражение доступа к массиву для назначения элемента массиву.
Вы можете использовать две «традиционные» петли for
с выражением доступа к массиву для инициализации массива.
for (int s = 0; s < SUITS; s++)
for (int c = 0; c < RANKS; c++)
cards[s][c] = new Card(...);
Можно использовать инициализатор массива, но это было бы утомительно, слишком многословен, и подвержен ошибкам.
cards = new Card[][] {
{new Card(...), new Card(...), ... },
{new Card(...), new Card(...), ... },
...};
Интересно, потому что 2D массив реализован как массив массивов, и используются ссылки на массив, то внешней массив может быть инициализирован с расширенной for
петли, до тех пор, как внутренней массива инициализируется «традиционным» циклом. Это работает, потому что suit
является массивом в cards
, поэтому suit[c]
является элементом в cards
.
cards = new Card[SUITS][RANKS];
for(Card[] suit : cards) {
for(int c = 0; c < RANKS; c++) {
suit[c] = new Card(suitVar, rankVar);
}
}
Знаете ли вы разницу между ['call on value' и' call by reference'] (http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by -стоимость)? – Tom