以下代码给出了一个例外,但是,我不明白为什么。
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()));
}
虽然,我理解为什么解决方案有效,但我不太明白为什么第一个例子没有。有人可以详细说明这一点。非常感谢。
答案 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()));
}