gpt4 book ai didi

Java 数组 : Unexpected behavior regarding size?

转载 作者:行者123 更新时间:2023-12-01 18:23:27 27 4
gpt4 key购买 nike

看一下以下用于构建卡片组的代码。我使用 xFactor“变量”(硬编码)将数组大小减去 1 以调整零索引。我注意到在遇到“java.lang.ArrayIndexOutOfBoundsException: 12”错误之前我实际上可以总共减去 40。

如果我输入 39 作为 xFactor,它运行得很好。它构建了整个牌组,所有 52 张牌,尽管奇怪的是,cards.length 将等于 DeckTotal - xFactor 在每个循环的两侧?!?这是没有意义的,因为它需要达到索引 51 才能构建整个套牌,而事实确实如此......

public void constructDeck(){
int deckTotal = SUITS.length * CARDS_PER_SUIT;
System.out.println(deckTotal); // 52
Card[] cards = new Card[deckTotal - xFactor];
System.out.println(cards.length); // Prints deckTotal - xFactor
for(String cardSuit : SUITS){
int cardNum = 1;
while(cardNum <= CARDS_PER_SUIT){
String cardDesc = cardDescription(cardNum);
int cardValue = cardNum;
if(cardNum >= VALUE_CEILING){
cardValue = VALUE_CEILING;
}
cards[cardNum -1] = new Card(cardDesc,cardSuit,cardValue);

this.deck.addCard(cards[cardNum -1]);
//System.out.println(cardDesc + " of " + cardSuit + " added to the deck");
cardNum++;
}
}
System.out.println(cards.length); // prints: deckTotal - xFactor
}

我唯一能想到的是,内存正在从数组的开头被修剪,以便为后面添加新卡腾出空间。因此,这意味着 ArrayIndexOutOfBoundsException 实际上只是我的计算机处理循环和/或收集垃圾的速度的函数。

我编写这段代码只是为了测试 Java 类介绍的基本作业。来自 JS 背景,在使用之前声明数组的大小一开始似乎有点奇怪(尽管我明白为什么)。不过,这里的行为确实出乎意料,我很好奇幕后发生了什么。

更新:谢谢你的建议。这是我根据您的建议编写的最终代码。

public void constructDeck(){
for(String cardSuit : SUITS){
int cardNum = 1;
while(cardNum <= CARDS_PER_SUIT){
String cardDesc = cardDescription(cardNum);
int cardValue = cardNum;
if(cardNum >= VALUE_CEILING){
cardValue = VALUE_CEILING;
}
this.deck.addCard(new Card(cardDesc,cardSuit,cardValue));
cardNum++;
}
}
}

最佳答案

您可以使用以下命令访问卡片数组。 cards[cardNum -1] 这意味着您仅使用数组中的前 12 个元素。 (不同的花色写在以前的花色之上)

因此,只要 xFactor 允许至少存在 12 张卡,代码就可以工作..(但可能不像您所期望的那样:) )

看看代码,你真的根本不需要数组

       this.deck.addCard( new Card(cardDesc,cardSuit,cardValue) );

关于Java 数组 : Unexpected behavior regarding size?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26990024/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com