ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 배열을 이용해서 로또번호 추첨
    개발 완료 2020. 3. 28. 13:09
    반응형

    코드는 "자바의 정석 기초편"을 참고하였습니다


    목적

    • Java 배열[] 사용
    • 1 ~ 45 중 임의의 번호 6개 출력
    • 헷갈리는 코드 중간중간 출력을 넣어서 보기 쉽게

    코드

    public class Main {
        public static void main(String[] args) {
    
            int[] ball = new int[45];
    
            for (int i = 0; i < ball.length; i++) {
                ball[i] = i+1;
            }
    
            int tmp = 0;
            int k = 0;
    
            for (int i = 0; i < 6; i++) {
                k = (int)(Math.random() * 45);
                    tmp = ball[i];
    
                    ball[i] = ball[k];
    
                    ball[k] = tmp;
            }
    
            for (int i = 0; i < 6; i++) {
                System.out.printf("ball[%d]=%d%n", i, ball[i]);
            }
        }
    }

    결과값


    코드설명

            int[] ball = new int[45];
    
            for (int i = 0; i < ball.length; i++) {
                ball[i] = i+1;
            }

     

    • 45개의 숫자를 넣을 수 있는 ball 배열을 만듭니다
    • ball의 길이만큼 for문을 돌립니다. 즉 길이 45만큼 입니다
    • ball 배열에 0+1 부터 시작하여, 1 ~ 45까지의 숫자를 넣습니다

     

    ball 배열

    0번째 자리 1
    1번째 자리 2
    2번째 자리 3
    3번째 자리 4
    4번째 자리 5
    5번째 자리 6

     

     

            int tmp = 0;
            int k = 0;

     

    • tmp, k 변수를 생성해줍니다
    • 이유는 뒤에서 보시면 됩니다
    • 보통 i 다음에 j를 많이 생성하시는데, 저는 헷갈려서 k로 많이 합니다
    • 변수명은 당연히 자유

     

            for (int i = 0; i < 6; i++) {
                k = (int)(Math.random() * 45);
                    tmp = ball[i];
    
                    ball[i] = ball[k];
    
                    ball[k] = tmp;
            }

     

    • i를 0 ~ 5까지 대입되는 for문을 출력합니다
    • k 변수에 0 ~ 45까지의 난수를 입력합니다
    • tmp = ball[0번째자리] 입니다. ball의 0번째 자리는 1입니다
    • 왜냐하면 첫 번째 for문에서 배열을 초기화 해줬습니다. i(0)+1 = 1
    • ball[i번째 자리] = ball[k번째 자리]는 ball[0번째 자리] = ball[난수번째 자리]
    • ball[난수번째 자리] = tmp

     

    마지막 코드의 핵심은 난수를 뽑아서, ball[0]에 넣습니다.

    그리고 원래의 난수 번째 자리에 tmp, 즉 0번째 숫자를 넣습니다.

     

    즉 0번째 자리에 7이 와서 들어왔으면, 

    원래 0번째에 있던 숫자가 7자리가 있던 곳으로 가는 겁니다.

     

    그렇게 바꿔서 끼운 게 아니라, 그냥 없애버리고 넣으면

    i가 7자리에서 읽어올 숫자가 없습니다


    보기 쉬운 코드

    public class Main {
        public static void main(String[] args) {
    
            int[] ball = new int[45];
    
            for (int i = 0; i < ball.length; i++) {
                ball[i] = i+1;
            }
    
            int tmp = 0;
            int k = 0;
    
            for (int i = 0; i < 6; i++) {
                k = (int)(Math.random() * 45);
                    tmp = ball[i];
                    System.out.println("tmp >>> " + tmp);
    
                    ball[i] = ball[k];
                    System.out.println("ball[i] >>> " + ball[i]);
    
                    ball[k] = tmp;
                    System.out.println("ball[k] >>> " + ball[k]);
    
                    System.out.println();
            }
    
            for (int i = 0; i < 6; i++) {
                System.out.printf("ball[%d]=%d%n", i, ball[i]);
            }
        }
    }

     

    결괏값

     

    • 두 번째 tmp 보시면, ball[1]번째 숫자인 2가 옵니다
    • 그리고 난수 K번째는 31번이므로, 31이 ball[1]에 옵니다
    • 원래 ball[i]에 있던 숫자는, 31번째 자리인 k에 2가 들어갑니다

     

    이 코드의 전개가 왜 이렇게 되는지 헷갈릴 때는 

    결괏값마다 출력을 걸어주면 이해하기 조금 수월합니다.


    혹시나 헷갈리는 부분은 댓글 달아주시면, 

    열심히 고민해보고 알려드리겠습니다

     

    반응형

    댓글

Designed by Tistory.