개발 완료

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가 들어갑니다

 

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

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


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

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

 

반응형