본문 바로가기

JAVA/국비 공부

3월9일수업(로또2번)

로또 게임 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