본문 바로가기

국비교육/국비교육 복습

day17_api.util.collection2_Test02 : Set 활용 - 로또 추첨 + Set의 요소 출력 (★★)

(Q) 이번 주 로또 예상번호를 추첨하여 출력 (Set을 사용하기)

- 로또 번호는 1~45까지 숫자가 총 6개

- 단, 번호는 낮은 것부터 나와야 합니다

메인 메소드 (1)

- Iterator를 이용한 출력

package day17_api.util.collection2;

import java.util.Collections;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

public class Test02 {

	public static void main(String[] args) {
		
		// Set 생성
		Set<Integer> set = new TreeSet<>();
		
		// Random 생성
		Random r = new Random();
		
		// 구현
		for(int i = 0 ; i < 6 ; i ++) {
			// 난수 생성
			int numR = r.nextInt(45) + 1;
			if(set.contains(numR)) {
				i --;
			}
			else {
				set.add(numR);
			}
		}
		
		// 정렬 (오름차순) - TreeSet은 자동으로 오름차순 정렬한다
		
		// 출력 - Set은 값을 index로 관리하지 않기 때문에 하나씩 출력이 까다롭다
		// 1) Set의 개별 요소를 Iterator(반복자)로 반환하여 출력하기
		System.out.print("이번주 로또 번호 : ");
		Iterator<Integer> iter = set.iterator();
		while(iter.hasNext()) {
			int number = iter.next();
			System.out.print(number + " ");
		}
	}
}

 

메인 메소드 (2)

- 확장형 for문을 이용한 출력

package day17_api.util.collection2;

import java.util.Collections;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

public class Test02_1 {

	public static void main(String[] args) {
		
		// Set 생성
		Set<Integer> set = new TreeSet<>();
		
		// Random 생성
		Random r = new Random();
		
		// 구현
		for(int i = 0 ; i < 6 ; i ++) {
			// 난수 생성
			int numR = r.nextInt(45) + 1;
			if(set.contains(numR)) {
				i --;
			}
			else {
				set.add(numR);
			}
		}
		
		// 정렬 (오름차순) - TreeSet은 자동으로 오름차순 정렬한다
		
		// 출력 - Set은 값을 index로 관리하지 않기 때문에 하나씩 출력이 까다롭다
		// 2) 확장형 for 구문으로 하는 방법
		System.out.print("이번주 로또 번호 : ");
		for(int number : set) {	// set에 있는 데이터 갯수만큼 전부 다
			System.out.print(number + " ");
		}
	}
}

 

Set의 값을 하나씩 출력하는 방법

1) Iterator(반복자) 라는 별개의 저장소로 이동 후 출력

- .hasNext() : 포함 여부 판정

- .next() : 공백 전까지의 값을 반환

Iterator<Integer> iter = set.iterator();	// set의 요소를 iterator로 반환

while(iter.hasNext()) {				// 다음 iterator 요소가 더 있으면 true를 반환 
	int number = iter.next();		// 다음 iterator 요소를 반환
	System.out.println(number);
}

 

2) 확장형 for문 사용 (List, Set 뿐만 아니라 배열에서도 사용할 수 있다)

for(int number : set) {				// set에 있는 데이터 갯수만큼 몽땅
	System.out.println(number);
}

 

3) 배열로 복사하거나 List로 복사 (비추천 - 메모리 낭비가 심하다)