迭代集合

时间:2015-06-03 03:42:56

标签: java iterator

以下代码给出了一个例外,但是,我不明白为什么。

List suits = ...;
List ranks = ...;
List sortedDeck = new ArrayList();

// BROKEN - throws NoSuchElementException!
for (Iterator i = suits.iterator(); i.hasNext(); )
    for (Iterator j = ranks.iterator(); j.hasNext(); )
        sortedDeck.add(new Card(i.next(), j.next()));

解决方案显然如下。

// Fixed, though a bit ugly
for (Iterator i = suits.iterator(); i.hasNext(); ) {
    Suit suit = (Suit) i.next();
    for (Iterator j = ranks.iterator(); j.hasNext(); )
        sortedDeck.add(new Card(suit, j.next()));
}

虽然,我理解为什么解决方案有效,但我不太明白为什么第一个例子没有。有人可以详细说明这一点。非常感谢。

2 个答案:

答案 0 :(得分:0)

好的,我理解为什么!这只是因为i.next()由于嵌套的for循环而被调用太多次了。它只是为每组“j'”提供一套西装,同一套装。迭代。因此,i.next()在嵌套循环中称为之外,以防止套装每次都更改。

答案 1 :(得分:-2)

您忘记在第一个区块中使用括号{}



List suits = ...;
List ranks = ...;
List sortedDeck = new ArrayList();

// BROKEN - throws NoSuchElementException!
for (Iterator i = suits.iterator(); i.hasNext(); ) {
    for (Iterator j = ranks.iterator(); j.hasNext(); )
        sortedDeck.add(new Card(i.next(), j.next()));
}