(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로 복사 (비추천 - 메모리 낭비가 심하다)