로또 코드 짜기

Dec 19, 2023
로또 코드 짜기

💡 Random() : Lib에 있는 함수 호출

💡 System.out.println(Arrays.toString(arr)); : 배열 전체 출력하기

동일하게 못 만들때는 예외 처리함(if처리)

  1. 중복값 상관없이 6개의 숫자를 뽑아서 배열에 집어넣기

package ex03;

import java.util.Arrays;
import java.util.Random;

public class LottoEx01 {
    public static void main(String[] args) {
        int arr[] = new int[6]; // 6칸 배열
        Random r = new Random();

        int num;

        num = r.nextInt(45) + 1; // 1 ~ 45까지
        arr[0] = num;

        num = r.nextInt(45) + 1; // 1 ~ 45까지
        arr[1] = num;

        num = r.nextInt(45) + 1; // 1 ~ 45까지
        arr[2] = num;

        num = r.nextInt(45) + 1; // 1 ~ 45까지
        arr[3] = num;

        num = r.nextInt(45) + 1; // 1 ~ 45까지
        arr[4] = num;

        num = r.nextInt(45) + 1; // 1 ~ 45까지
        arr[5] = num;

        System.out.println(Arrays.toString(arr));
    }
}
  1. 순서대로 코드짜기(코드를 말로 옮김)

package ex03;

import java.util.Arrays;
import java.util.Random;

public class LottoEx02 {
    public static void main(String[] args) {
        int arr[] = new int[6]; // 6칸 배열
        Random r = new Random(); // 랜덤함수

        int num;
        boolean isSame;

        // 1. 6바퀴 돌면서 로또 번호를 추첨
        // 2. 첫번째 바퀴는 공을 꺼내서 추첨한 번호를 그대로 사용
        // 3. 두번째 바퀴부터는 공을 꺼내서 이전 모든 바퀴의 번호와 비교
        // (isSame) : 1번이상 중복이 나오면 true, 다 다르면 false
        // 4. isSame == true (중복) -> 3번부터 다시 시작
        // 5. isSame == false -> 공 집어넣기 -> 3번부터 다시 시작

        for (int i = 0; i < arr.length; i++) {
            // 공 꺼내서 바로 추가
            if(i == 0) {
                num = r.nextInt(45) + 1; // 1 ~ 6까지
                arr[i] = num;
                continue;
            }

            while(true){
                isSame = false; // 중복된 값 없음
                num = r.nextInt(45) + 1;

                /**
                 * 이전 번호들과 비교
                 * i == 1(0과 비교)
                 * i == 2(1, 0 비교)
                 * i == 3(2, 1, 0 비교)
                 */
                for (int j = i-1; j >=0; j--) {
                    if (arr[j] == arr[i]) {
                        isSame = true;
                        break;
                    }
                }
                if(!isSame){
                    arr[i] = num;
                    break;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}
  1. 리팩토링

    (말로 옮긴 후에 리팩토링을 할 수 있음)

package ex03;

import java.util.Arrays;
import java.util.Random;

public class LottoEx03 {
    public static void main(String[] args) {
        int arr[] = new int[6]; // 6칸 배열
        Random r = new Random(); // 랜덤함수

        int num;

        for (int i = 0; i < arr.length; i++) {
            
            num = r.nextInt(45) + 1;
            arr[i] = num;

            for (int j = i-1; j >=0; j--) {
                if (arr[j] == num) {
                    i--;
                    break;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

i = 0 → 값을 0번지에 넣음

i = 1 → 0번지와 비교해서 다르면 1번지에 들어감

i =3 → 0, 1번지와 비교해서 같으니까 i-1로 삭제하고 다시 반복됨

Share article

vosw1