JAVA

Math.random() 메서드를 통해 '로또 번호 생성기' 만들기 (JAVA)

ho코딩 2024. 1. 11. 00:38

저번 시간에 가볍게 다루었던 Math.random() 메서드를 통해 

가장 와닿고 재밌다고 생각되는 로또 번호 생성기 코드를 한 번 작성해 보겠습니다. 

 

이것만이 정답은 아니고 여러가지 방법이 있겠지만 저는 배열 선언과 배열간 자리바꿈을 통한 로또 번호 생성을 했습니다.


public class lotto {
  public static void main(String[] args) {
    int[] ball = new int[45];

    for(int i=0; i<ball.length;i++){
      ball[i]=i+1; //ball[0]에는 0+1이므로 1이 저장된다. 또한 ball[44]에는 45가 저장된다.
    }

    int tmp = 0; //두 값을 바꾸는데 사용할 임시 변수
    int j = 0; // 임의의 값을 얻어서 저장할 변수

    for(int i=0; i<6; i++) {
      j=(int)(Math.random()*45);  //i번 인덱스와 섞을 j 번 인덱스를 랜덤하게 구한다.

      //ball[i]와 ball[j] 섞기.
      tmp = ball[i];
      ball[i]=ball[j];
      ball[j]=tmp;
    }

    for(int i=0 ; i<6; i++){
      System.out.printf("ball[%d]=%d%n",i,ball[i]);
    }
  }
}

 

하나씩 설명해보자면, 

 

먼저, 로또 번호의 범위인 1~45의 값을 저장하는 배열을 생성합니다. 

for(int i=0; i<ball.length;i++){
ball[i]=i+1; //ball[0]에는 0+1이므로 1이 저장된다. 또한 ball[44]에는 45가 저장된다.
}

이제 ball[] 배열에는 1부터 45까지의 값이 저장되게 됩니다. 

(i=0부터 i<ball.length 이기 때문에 0부터 44까지 반복) 

 

우리는 1부터 45까지 값이 저장된 배열 중 앞의 6개만 배열간 자리바꿈을 통해 이용할 것 이므로 

자리를 바꾸기 위한 변수 tmp, j를 선언해줍니다. 

 

현재까지 상황을 다시 정리해보자면, 

ball [ ] 은 45개의 인덱스 길이를 가진 배열이며, 

ball[0]~ ball[44]에 각각 1~45 까지의 값이 순서대로 들어가 있습니다.

 

이제 이 순서대로 되어있는 배열을 Math.random() 함수를 사용하여 섞어줄 것 입니다. 

 

 

j에 0~44까지 숫자 중 하나를 랜덤으로 담습니다. (j는 인덱스에 들어갈 숫자이므로 44까지 입니다) 

 

그리고 반복문은 i는 0부터 5까지 총 6번 반복합니다. (로또의 숫자가 6개이기 때문) 

 

그리고 tmp에 임시로 ball[i]의 값을 담아두고 

ball[i]에는 랜덤으로 뽑은 ball[j]의 값을 

다시 ball[j]에는 tmp에 임시로 담은 값을 넣어 

 

ball[i]의 값과 ball[j]의 값을 바꾸는 과정을 6번 반복합니다. 

 

그렇다면 반복이 끝나면 어떤 상태일까요? 

 

ball[ ]배열의 0번부터 5번 인덱스 

즉, 처음부터 6개의 인덱스에는 섞여서 랜덤한 값이 들어가 있을 것 입니다. 

 

그러면 마지막으로 이 값들을 출력합니다. 

 

 

 

결과화면 창 입니다. 6개의 숫자가 랜덤하게 잘 나온것을 확인 할 수 있습니다. 

 

조금 어려운 방법을 통해서, 추출해서 헷갈릴 수 있을 것 같습니다. 

 

마무리 정리

 

 

1. ball[ ] 배열에 1부터 45까지의 값을 차례대로 나열함 

(ball[0]=1 , ball[1]=2, ball[2]=3 ~~~ ball[44]=45 ) 

 

2. 섞을 인덱스를 random함수를 통해 선정하고, 0번 인덱스부터 차례로 바꿔줌

(ex. 첫번째 반복 (i=0)에서 ranodom 함수를 통해 j=43이 나온 경우)

-> ball[0]의 값과 ball[43]의 값을 서로 바꿈. ball[0]=44 , ball[43]=0 

 

3.이 과정을 6번 반복함. 

-> ball[0]~ ball[5]까지 6개의 인덱스가 랜덤하게 섞임. 

 

4.섞인 ball[0] ~ ball[5] 까지의 값을 출력함. 

 

 

 

 

 

 

 

'JAVA' 카테고리의 다른 글

Integer.ParseInt() / Math.round() / Math.random() 메서드 (JAVA)  (0) 2024.01.11