所以我正在为卡片游戏创建一个卡片构造器,其中for循环不起作用。这是它的代码,忽略了构造函数中的第三个整数变量,因为它没有解决问题所以我对它进行了评论:
public Deck(String[] ranks, String[] suits, int[] values) {
cards = new ArrayList<Card>();
for(int a = 0; a<=ranks.length; a++){
for(int b=0; b<=suits.length;b++){
cards.add(new Card(ranks[a],suits[b], 0));
System.out.println(cards);
size+=1;
}
}
}
然而,我的嵌套for循环不起作用。我为甲板上的所有牌创建了一套西装和排名阵列,从一个到Ace和西装阵列包含&#34; Hearts&#34;,&#34;黑桃&#34;,&#34;俱乐部&#34; ,&#34; Diamonds&#34;。这是我在故障排除时收到的打印输出以及我随之收到的错误消息。
[(One of Hearts (point value = 0)][(One of Hearts (point value = 0), (One of Spades (point value = 0)]
[(One of Hearts (point value = 0), (One of Spades (point value = 0), (One of Clubs (point value = 0)]
[(One of Hearts (point value = 0), (One of Spades (point value = 0), (One of Clubs (point value = 0), (One of Diamonds (point value = 0)]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Deck.<init>(Deck.java:36)
at DeckTester.main(DeckTester.java:14)
我的理解是,嵌套的for循环将完成包含4个套装的Suits数组列表,就像在打印输出中一样。然而,我认为在经历了四次之后,而不是产生错误,&#34; a&#34; for循环然后将移动到排列数组中的下一个项目而不是结束。所以它在有序对中的输出看起来像
(0,0) (0,1) (0,2) (0,3) (1,0) (1,1) (1,2) (1,3) etc.
非常感谢任何帮助,感谢您的时间。
答案 0 :(得分:4)
n个元素的数组具有从0
到n-1
的索引。 n
是此类数组的无效索引。
你的指数偏离一个。它应该是:
for(int a = 0; a<ranks.length; a++){
for(int b=0; b<suits.length;b++){
cards.add(new Card(ranks[a],suits[b], 0));
System.out.println(cards);
size+=1;
}
}
}
答案 1 :(得分:0)
如果不需要数组索引,可以使用for-each循环。
它可以避免这种错误。
for(String ra : ranks){
for(Stirng su : suits){
cards.add(new Card(ra, su, 0));
System.out.println(cards);
size+=1;
}
}
}
易于阅读,但不能在任何情况下使用。