Java 用iterator实现多重for循环可能会遇到的问题
Effective Java 中已有相应介绍:
原因就在于
for(Iterator<Suit> i = suits.iterator();i.hasNext();){
for(Iterator<Rank> j =ranks.iterator();j.hasNext();){
deck.add(new Card(i.next(),j.next()));
我们原本是打算每个 i 对应 j 个内循环,但实际上却是 在执行每一次内循环时,不仅 j 在遍历下一个 ranks 的元素,i 也在遍历下一个 suits 的元素(i.next()
),因为 j 元素的个数多于 i 的元素个数,所以当遍历完第 i 个内循环时,由于 i+1< j
,内循环继续执行,而 i+1 对应的 suits 已经为空了,所以出现 NoSuchElementException