首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以通过增强的for循环初始化数组中的对象?

是否可以通过增强的for循环初始化数组中的对象?
EN

Stack Overflow用户
提问于 2015-02-19 19:27:31
回答 3查看 666关注 0票数 0

在下面的(错误)代码中,我希望初始化数组cards中包含的对象,以创建一个桥面。有什么方法可以通过增强的for循环来完成,还是让我使用“标准”for循环?

代码语言:javascript
运行
复制
cards = new Card[SUITS][RANKS];

for(Card[] suit : cards) {
    for(Card card : suit) {
        card = new Card(suitVar, rankVar);
    }
}
EN

Stack Overflow用户

回答已采纳

发布于 2015-02-19 19:38:21

不,这是不可能的,因为增强的for循环将提供对当前元素的引用。将一个新对象分配给引用不会将元素分配给数组。使用数组访问表达式向数组分配元素是无可替代的。

您可以使用两个带有数组访问表达式的“传统”for循环来初始化数组。

代码语言:javascript
运行
复制
for (int s = 0; s < SUITS; s++)
   for (int c = 0; c < RANKS; c++)
       cards[s][c] = new Card(...);

使用数组初始化程序是可能的,但它会乏味、过于冗长和容易出错。

代码语言:javascript
运行
复制
cards = new Card[][] {
  {new Card(...), new Card(...), ... },
  {new Card(...), new Card(...), ... },
  ...};

有趣的是,由于2D数组是作为数组实现的,并且使用数组引用,所以可以使用增强的for循环初始化外部数组,只要内部数组是用“传统”循环初始化的。这是因为suitcards中的数组,所以suit[c]cards中的一个元素。

代码语言:javascript
运行
复制
cards = new Card[SUITS][RANKS];

for(Card[] suit : cards) {
    for(int c = 0; c < RANKS; c++) {
        suit[c] = new Card(suitVar, rankVar);
    }
}
票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28615159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档