// Can you spot the bug? - Page 46 package effectivejava.chapter8.item46; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; enum Suit { CLUB, DIAMOND, HEART, SPADE } enum Rank { ACE, DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING } class Card { final Suit suit; final Rank rank; Card(Suit suit, Rank rank) { this.suit = suit; this.rank = rank; } } public class NestedIteration { public static void wrong(){ Collection suits = Arrays.asList(Suit.values()); Collection ranks = Arrays.asList(Rank.values()); List deck = new ArrayList(); for (Iterator i = suits.iterator(); i.hasNext();) for (Iterator j = ranks.iterator(); j.hasNext();){ Suit x = i.next();Rank y = j.next(); System.out.println(x + ":" + y); deck.add(new Card(x, y)); } } public static void right(){ Collection suits = Arrays.asList(Suit.values()); Collection ranks = Arrays.asList(Rank.values()); List deck = new ArrayList(); // Preferred idiom for nested iteration on collections and arrays for (Suit suit : suits) for (Rank rank : ranks){ System.out.println(suit + ":" + rank); deck.add(new Card(suit, rank)); } } public static void main(String[] args) { //wrong(); right(); } }