版权声明:本文为博主原创文章,转载请说明出处 https://blog.csdn.net/u010002184/article/details/89472795
enum NUMS {ONE, TWO, THREE, FOUR, FIVE, SIX}
enum NUMS2 {ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN}
public static void main(String[] args) {
Collection<NUMS> nums = Arrays.asList(NUMS.values());
/**
* 只能输出6种
*/
for (Iterator i = nums.iterator(); i.hasNext(); ) {
System.out.println("111");
for (Iterator j = nums.iterator(); j.hasNext(); ) {
System.out.println("222");
System.out.println(i.next() + " " + j.next());
}
}
// 111
// 222
// ONE ONE
// 222
// TWO TWO
// 222
// THREE THREE
// 222
// FOUR FOUR
// 222
// FIVE FIVE
// 222
// SIX SIX
Collection<NUMS2> nums2s = Arrays.asList(NUMS2.values());
/**
* 外层集合报异常NoSuchElementException
*/
for (Iterator i = nums.iterator(); i.hasNext(); ) {
System.out.println("111");
for (Iterator j = nums2s.iterator(); j.hasNext(); ) {
System.out.println("222");
System.out.println(i.next() + " " + j.next());//此时j.hasNext返回true,后面还有元素,而i.next()在上次循环时已到达尾部,外层集合报异常NoSuchElementException
}
}
// 111
// 222
// ONE ONE
// 222
// TWO TWO
// 222
// THREE THREE
// 222
// FOUR FOUR
// 222
// FIVE FIVE
// 222
// SIX SIX
// 222
// Exception in thread "main" java.util.NoSuchElementException
/**
* 外层集合报异常NoSuchElementException
*/
for (Iterator i = nums2s.iterator(); i.hasNext(); ) {
System.out.println("111");
for (Iterator j = nums.iterator(); j.hasNext(); ) {
System.out.println("222");
System.out.println(i.next() + " " + j.next());//此时j.hasNext进行两轮循环,第二次循环时j.hasNext()没有到达末尾,返回true,而i.next()在一轮循环时已到达尾部,外层集合报异常NoSuchElementException
}
}
// 111
// 222
// ONE ONE
// 222
// TWO TWO
// 222
// THREE THREE
// 222
// FOUR FOUR
// 222
// FIVE FIVE
// 222
// SIX SIX
// 111
// 222
// SEVEN ONE
// 222
// EIGHT TWO
// 222
// NINE THREE
// 222
// TEN FOUR
// 222
// Exception in thread "main" java.util.NoSuchElementException
/**
* 这样才能保证36种组合(保证i.next()没有在内层循环执行)
*/
for (Iterator i = nums.iterator(); i.hasNext(); ) {
NUMS n = (NUMS) i.next();
for (Iterator j = nums.iterator(); j.hasNext(); ) {
System.out.println(n + " " + j.next());
}
}
// ONE ONE
// ONE TWO
// ONE THREE
// ONE FOUR
// ONE FIVE
// ONE SIX
// TWO ONE
// TWO TWO
// TWO THREE
// TWO FOUR
// TWO FIVE
// TWO SIX
// THREE ONE
// THREE TWO
// THREE THREE
// THREE FOUR
// THREE FIVE
// THREE SIX
// FOUR ONE
// FOUR TWO
// FOUR THREE
// FOUR FOUR
// FOUR FIVE
// FOUR SIX
// FIVE ONE
// FIVE TWO
// FIVE THREE
// FIVE FOUR
// FIVE FIVE
// FIVE SIX
// SIX ONE
// SIX TWO
// SIX THREE
// SIX FOUR
// SIX FIVE
// SIX SIX
}
i.next在内层循环时每次也执行了,导致j.next到达末尾时,同时也导致i.hashNext返回false,故只会输出6种组合。
使用for-each:
for (NUMS m : nums)
for (NUMS2 n : nums2s)
System.out.println(m + " " + n);
// ONE ONE
// ONE TWO
// ONE THREE
// ONE FOUR
// ONE FIVE
// ONE SIX
// ONE SEVEN
// ONE EIGHT
// ONE NINE
// ONE TEN
// TWO ONE
// TWO TWO
// TWO THREE
// TWO FOUR
// TWO FIVE
// TWO SIX
// TWO SEVEN
// TWO EIGHT
// TWO NINE
// TWO TEN
// THREE ONE
// THREE TWO
// THREE THREE
// THREE FOUR
// THREE FIVE
// THREE SIX
// THREE SEVEN
// THREE EIGHT
// THREE NINE
// THREE TEN
// FOUR ONE
// FOUR TWO
// FOUR THREE
// FOUR FOUR
// FOUR FIVE
// FOUR SIX
// FOUR SEVEN
// FOUR EIGHT
// FOUR NINE
// FOUR TEN
// FIVE ONE
// FIVE TWO
// FIVE THREE
// FIVE FOUR
// FIVE FIVE
// FIVE SIX
// FIVE SEVEN
// FIVE EIGHT
// FIVE NINE
// FIVE TEN
// SIX ONE
// SIX TWO
// SIX THREE
// SIX FOUR
// SIX FIVE
// SIX SIX
// SIX SEVEN
// SIX EIGHT
// SIX NINE
// SIX TEN
end