inblog logo
|
vosw1
    Java

    로또 코드 짜기

    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

    RSS·Powered by Inblog