在下面的(错误)代码中,我希望初始化数组cards中包含的对象,以创建一个桥面。有什么方法可以通过增强的for循环来完成,还是让我使用“标准”for循环?
cards = new Card[SUITS][RANKS];
for(Card[] suit : cards) {
for(Card card : suit) {
card = new Card(suitVar, rankVar);
}
}发布于 2015-02-19 19:38:21
不,这是不可能的,因为增强的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);
}
}https://stackoverflow.com/questions/28615159
复制相似问题