package algo;
import java.util.Random;
public class Lotto05 {
public static void main(String[] args) {
// 준비
int num = 0;
int[] arr = new int[6];
Random rand = new Random();
boolean isSameNum = false;
// 1회 추첨
// [10]
num = rand.nextInt(45) + 1;
arr[0] = num;
//-------------------------------------------
int r = 1; // 현재 배열 인덱스 위치
// 2회 추첨
// [10, 10] | [10, 13]
// 3회 추첨
// [10, 13, 10] | [10, 13, 14]
// 4회 추첨
// [10, 13 ,14, 13] | [10, 13, 14, 24]
// 5회 추첨
// [10, 13 ,14, 24, 10] | [10, 13, 14, 24, 35]
// 6회 추첨
// [10, 13 ,14, 24, 35, 24] | [10, 13, 14, 24, 35, 40]
for (int j = 0; j < 5; j++) {
while (true) {
num = rand.nextInt(45) + 1;
for (int i = 0; i < r; i++) {
if (arr[i] == num) {
isSameNum = true;
break; // 중복 찾으면 다음 위치 확인 x
}
}
if (!isSameNum) {
arr[r] = num;
break;
}
}
r++;
}
for (int i = 0; i < 6; i++) {
System.out.print(arr[i] + ", ");
}
}
}



이렇게 잘 동작하다가

이렇게 아무런 결과도 나오지 않고 멈춰버린다 그래서 내부 결과를 보기 위해 로그 출력을 해보았다.
for (int j = 0; j < 5; j++) {
while (true) {
System.out.println(j + "회 추첨");
num = rand.nextInt(45) + 1;
System.out.println(num + "번 추첨");
for (int i = 0; i < r; i++) {
System.out.println(arr[i] + "와 비교");
if (arr[i] == num) {
isSameNum = true;
System.out.println("중복 찾음");
break; // 중복 찾으면 다음 위치 확인 x
}
}
if (!isSameNum) {
System.out.println("번호 저장");
arr[r] = num;
break;
}
}
r++;
}

4회 추첨상태에서 중단 되지 않고 무한반복하고 있다. 발생한 이유를 생각해보자.
- 4회 추첨이다
- 번호를 추첨했다.
- 이전에 나왔던 번호랑 비교를 한다.
- 같은 번호가 있다.
- isSameNum = true 한다.
- isSameNum이 true라서 저장하지 않는다.
- while문의 처음으로 돌아간다.
- 4회 추첨이다.
- 번호를 추첨했다.
- 이전에 나왔던 번호랑 비교한다.
- 같은 번호가 없다.
- isSameNum 가 true다
- 이 번호를 저장하지 않고
- 다시 while문 처음으로 돌아간다.
1번이라도 중복값이 나와 isSameNum이 true가 되면 값을 저장하지 않고 계속 번호를 추첨하고, 확인하고, 추첨하고, 확인하고를 반복한다.
따라서, while이 시작할때 isSameNum을 false로 초기화 해주자!
for (int j = 0; j < 5; j++) {
while (true) {
isSameNum = false;
System.out.println(j + "회 추첨");
num = rand.nextInt(45) + 1;
System.out.println(num + "번 추첨");
for (int i = 0; i < r; i++) {
System.out.println(arr[i] + "와 비교");
if (arr[i] == num) {
isSameNum = true;
System.out.println("중복 찾음");
break; // 중복 찾으면 다음 위치 확인 x
}
}
if (!isSameNum) {
System.out.println("번호 저장");
arr[r] = num;
break;
}
}
r++;
}
Share article