로또 게임 2번
1부터 45의 랜덤한 숫자를 크기가 6인 배열에 넣어주고 출력해주는 프로그램
+ 중복 제거 알고리즘 추가
중복이 되지않게 하려면
index가 다름.
저장된 값은 같음.
package day0309;
import java.util.Random;
public class LottoGame02 {
static final int size = 6;
static final int NUMBER_MAX = 45;
public static void main(String[] args) {
Random random = new Random();
System.out.println("로또게임 ver 0.2");
int[] lottoNum = new int[size];
int idx = 0;
while (idx < lottoNum.length) {
// 새로 추가해줄 숫자
int randomNumber = random.nextInt(NUMBER_MAX) + 1;
// 중복된 숫자일 경우, false로 바뀌는 boolean 변수
// numberChecker
boolean numberCheck = true;
// for 문을 통해 lottoNumbers의 각 엘리먼트가 randomNumber와 같은지 체크하여
// 같을 시에는 numberChecker의 값을 false로 바꾸고 break를 한다.
for (int i = 0; i < lottoNum.length; i++) {
if (randomNumber == lottoNum[i]) {
numberCheck = false;
break;
}
}
if (numberCheck) {
lottoNum[idx] = randomNumber;
idx++;
}
}
System.out.println();
System.out.println("중복 제거후");
System.out.println();
for (int i = 0; i < lottoNum.length; i++) {
System.out.printf("lottoNum[%d]: [%2d]\n", i, lottoNum[i]);
}
}
}
package day0309;
import java.util.Random;
public class LottoGame02 {
static final int size = 6;
static final int NUMBER_MAX = 45;
public static void main(String[] args) {
Random random = new Random();
System.out.println("로또게임 ver 0.2");
int[] lottoNum = new int[size];
// for (int i = 0; i < lottoNum.length; i++) {
//
// lottoNum[i] = random.nextInt(NUMBER_MAX) + 1;
// }
//
// System.out.println();
// System.out.println("중복 제거 전");
// System.out.println();
//
// for (int i = 0; i < lottoNum.length; i++) {
// System.out.printf("lottoNumbers[%d]: [%2d]\n", i, lottoNum[i]);
// }
// System.out.println("-------------------------------------------------");
// // 중복제거용 2중 for문
// // i 와 j가 다르지만
// // lottoNumbers[i]와 lottoNumbers[j]가 같다는 건 중복이므로
// // lottoNumbers[i]에 새로운 값을 넣어주고 다시 처음부터 검사하게 만들어준다.
//
// // 무식한 방법이다.
// // 만약 이방법을 쓸 경우, j for 문은 매우 많이 반복될 수 있다.
// // 또한 최소 36번 이상 if 조건식을 실행하게 된다.
//
// for (int i = 0; i < lottoNum.length; i++) {
// for (int j = 0; j < lottoNum.length; j++) {
// if (i != j && lottoNum[i] == lottoNum[j]) {
//
// System.out.printf("%d 인덱스와 %d 인덱스가 중복이므로 %d에 새로운 할당\n", i, j, i);
//
// lottoNum[i] = random.nextInt(NUMBER_MAX) + 1;
// j = -1; // j는 -1로 초기화
//
// }
// }
// }
// 2. 좀 더 나은 방법
// 우리가 랜덤 숫자를 하나 뽑아서
// 그 숫자가 우리배열에 존재하는지 체크하여
// 존재하지 않을 때에만 배열에 넣어준다.
// 어디 위치에 추가할지를 정하는 int idx
int idx = 0;
while (idx < lottoNum.length) {
// 새로 추가해줄 숫자
int randomNumber = random.nextInt(NUMBER_MAX) + 1;
// 중복된 숫자일 경우, false로 바뀌는 boolean 변수
// numberChecker
boolean numberCheck = true;
// for 문을 통해 lottoNumbers의 각 엘리먼트가 randomNumber와 같은지 체크하여
// 같을 시에는 numberChecker의 값을 false로 바꾸고 break를 한다.
for (int i = 0; i < lottoNum.length; i++) {
if (randomNumber == lottoNum[i]) {
numberCheck = false;
break;
}
}
if (numberCheck) {
lottoNum[idx] = randomNumber;
idx++;
}
}
System.out.println();
System.out.println("중복 제거후");
System.out.println();
for (int i = 0; i < lottoNum.length; i++) {
System.out.printf("lottoNum[%d]: [%2d]\n", i, lottoNum[i]);
}
}
}
//중복 제거할때 총 했던 코드
'JAVA > 국비 공부' 카테고리의 다른 글
3월9일(로또 02 해설) (0) | 2021.03.09 |
---|---|
3월9일 수업(로또03) (0) | 2021.03.09 |
3월9일 수업(로또01) (0) | 2021.03.09 |
3월9일수업(배열) (0) | 2021.03.09 |
3월8일수업(별찍기10) (0) | 2021.03.08 |