我的嵌套For循环不起作用

时间:2015-03-12 13:18:59

标签: java for-loop nested-loops

所以我正在为卡片游戏创建一个卡片构造器,其中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.

非常感谢任何帮助,感谢您的时间。

2 个答案:

答案 0 :(得分:4)

n个元素的数组具有从0n-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;
        }
    }
}

易于阅读,但不能在任何情况下使用。