개발/JAVA

[JAVA]자바 Random 클래스를 활용한 로또 프로그램(중복제거, 순서정렬)

윤_ve 2021. 3. 5. 21:19

오늘 만들어 본것은 Random클래스를 활용한 로또 프로그램이다.

Random을 배우면 무조건 필수적으로 한번쯤은 만들어보는 그런 거랄까..?

 

사실 대한민국 국민이라면 Random함수를 처음 배울 때 누구나 로또를 가장먼저 떠올릴것이다. 

나도 오늘 배우자마자 로또 프로그램이나 만들어보자고 생각해서 바로 만들어 보았다.

 

생각보다 간단하고 쉽다. 조금만 배운사람이면 누구나 만들 수 있으니 다들 한번쯤 만들어 보길 바란다.

 

그전에 Random에 대해 알고 넘어 가보자.

Random 클래스가 무엇이냐 하면 java.util 패키지중 하나인 Random은 난수발생기이다. 

일정 범위가 주어지면 그 사이의 수 중 하나를 임의로 선택하게 된다.

걔 중에 가장 많이 쓴다고 하면 역시 nextInt()메서드가 아닐까 싶다.

 

Scanner를 사용하면 자주 쓰게 되는 int값을 입력 받는건데 랜덤에서도 int값을 랜덤으로 지정하게 하는것이다.

범위를 따로 지정해주지 않으면 int의 광범위한 정수 범위 중 하나의 숫자를 골라주니 보통은 범위를 넣게 된다.

 

사용방법은 간단하다.

객체.nextInt()를 사용하면 되는데 뒤의 소괄호 사이에 값을 넣어 주게 되면 0 ~ (입력값 - 1)만큼의 숫자 사이에서 임의의 정수 하나를 추출하게 된다.

 

-1이 되는 이유는 우리가 너무도 잘 아는 컴퓨터의 숫자는 0에서 시작하기 때문이라서! 인데 무슨 말이냐면

예를 들어 입력한 숫자가 10이라고 치면 "10까지의 수 중에 하나를 골라줘!!" 가 아니라, "0부터 10개의 정수 중 하나를 골라줘!!"가 되기때문에 0 ~ 9까지의 숫자중 하나를 부탁하게 되는 것이다. 그래서 0 ~ (입력값 -1)의 범위의 정수 하나를 출력하게 되는 것이다.

  

그러면 로또 프로그램을 통해 Random을 사용해보자. 막상 보면 엄청 간단하다.

 

 

 

우선 로또 클래스를 만들고 랜덤 클래스를 객체로 생성한다.

로또는 번호가 6개 이므로 배열의 크기가 6인 정수 배열을 하나 만들어 준다.

 

temp는 나중에 내림차순 정렬을 위해 필요한 변수이니 하나 만들어 둔다!

 

그 다음 반복문 for문을 돌려서 numArray 배열에 랜덤한 숫자를 넣어준다.

위에도 설명했지만 로또는 1 ~ 45까지의 숫자 중 랜덤한 6개 숫자이므로

'+1'절대 빼먹으면 안된다. 저게 없으면 0 ~ 44까지 중 숫자를 골라준다.

 

그리고 이중 for문으로 앞의 수와 뒤의 수가 같은 수이면 횟수를 한번 줄이고 다시 추출하게 하는 

중복제거또한 꼭 해줘야하는 로직이다.

 

 

 

다음으로는 위에 변수로 만들어 뒀던 temp를 쓸 차례이다.

 

앞의 입력한 수가 뒤에 입력한 수보다 더 클 경우 temp를 사용하여 한바퀴 돌려 서로의 위치를 바꿔준다. 이런 행동이 반복되면서 숫자는 자연스럽게 내림차순 정렬이 되고 이는 우리가 아는 로또와 같은 6자리의 숫자로 출력이 된다.

 

Arrays.toString을 이용하면 배열을 반복문 없이 콘솔에 출력할 수 있다.

(이중반복문은 Arrays.deepToString을 사용한다.)

 

 

한번 눌러보니 위의 숫자가 나왔는데 이걸로 이젠 매주 로또를 구매해야겠다고 생각했지만,

역시 자동만큼 편한건 없는 것 같다!ㅋㅋ 간단한 만큼 다들 한번씩 구현 해보자!!