여행을 개발하다

Random 클래스를 활용하여 lotto 번호 추출 프로그램 만들기 본문

BackEnd/Java

Random 클래스를 활용하여 lotto 번호 추출 프로그램 만들기

yhtragramming 2019. 5. 13. 20:14

안녕하세요 : )

 

오늘은 random 클래스를 활용하여 lotto 번호를 추출하는 프로그램을 코딩해보겠습니다.


1. Algorithm 구상

1 ~ 45의 숫자를 저장할 수 있는 lotto_array이라는 이름의 배열을 선언한다.

lotto_test 배열에 1부터 45의 숫자를 저장한다.

random 클래스 자료형의 random 객체를 형성한다.

정수형 변수 r을 선언하고, 1부터 44 이하의 숫자에서 무작위 1개를 선택하여 r에 저장한다.

lotto_test의 0번째 인수와 r번째 인수를 100000번 섞는다.

섞기가 완료되면 0번째부터 6번째 인수를 시간차를 두고 호출한다.

참고로 0번째부터 5번째 인수는 당첨번호이며, 6번째 인수는 보너스 번호이다.

2. Coding

① 1 ~ 45의 숫자를 저장할 수 있는 lotto_test이라는 이름의 배열을 선언한다.

② lotto_test 배열에 1부터 45의 숫자를 저장한다.

 

for문으로 확인 결과, 정상적으로 lotto_test 배열이 생성되었고, 인수도 입력되었습니다.

출력 내용은 주석으로 처리하겠습니다.

 

③ random 클래스 자료형의 random 객체를 형성한다.

 

④ 정수형 변수 r을 선언하고, 1부터 44 이하의 숫자에서 무작위 1개를 선택하여 r에 저장한다.

⑤ lotto_test의 0번째 인수와 r번째 인수를 바꾸는 작업을 100,000번 반복한다.

(C++에서는 swap이라는 함수가 있었습니다. 그런데 Java와 Python은 사용자 정의 함수로 만들어 쓰거나, 임시 저장소 temp라는 변수를 선언하여 맞교환하는 알고리즘을 적용해야 합니다.)

 

 

 


Tip! - 값을 맞교환하는 알고리즘

" 자료형 temp = a;

a = b;

b= temp; "

 

매우 자주 사용되는 알고리즘이니 알아두세요!


⑥ 섞기가 완료되면 0번째부터 6번째 인수를 시간차를 두고 호출한다.

참고로 0번째부터 5번째 인수는 당첨 번호이며, 6번째 인수는 보너스 번호이다.

 

lotto_test 배열의 0번째 인수부터 6번째 인수만 호출하는 코드 외에 다른 것들이 보이시죠?

 

해석을 해드리면,

"k가 0보다 크면, 즉 lotto_test[k]에서 k가 0보다 클 경우, 다시 말해 첫 번째 배열의 값부터,

앞에 ', '를 붙여 출력하라는 뜻입니다. 번호를 쉼표로 구분하여 찍기 위해 코드를 추가하였습니다."

 

다 끝난 것 같은데, 이제는 시차를 두고 출력할 일만 남았네요.

 

C++에서도 sleep이라는 함수를 사용하여, 출력을 지연시키는 작업을 해보았는데요.

Java에도 sleep이라는 메소드를 활용하여 구현이 가능합니다.

 

위치 : lotto_test 배열의 k번째 인수부터 출력하라는 내용의 코드 바로 뒤

의미 : for문의 loop 안에서 다음의 반복 실행 전, 시차를 두고 출력하라는 논리 순서

 

에 맞게 'thr'만 입력하고 ctrl + spacebar, 'thread - java.lang'을 선택하고 '.'을 입력.

sleep(long mills)를 선택하여 enter키를 눌러줍니다.

 

millisecond 단위이므로, (저의 경우) 1000 millisecond으로 입력 후 enter 키를 누르겠습니다.

 

엇 그런데... 칼 같이 ERROR가 나네요.

그렇다면, 이번 시간만 '묻지 마 코딩'을 진행하겠습니다.

 

빨간 줄에 마우스를 갖다 대시면,

다음과 같이 팝업 메시지와 함께 아래에 'Surround with try/catch'라는 fix 리스트가 나옵니다.

 

그리고 'Surround with try/catch'를 클릭합니다.

 

그런데 갑자기 6줄이 자동 코딩되었네요.

 

Thread.sleep(), Try / Catch는 앞으로 차차 설명하도록 하겠습니다. 하하.

여기까지 코딩이 완료되었다면?

 

1000 millisecond의 시차를 두고 저의 당첨 번호인 42, 22, 13, 24, 11, 36, 35가 나왔네요.

보너스 번호도요 ㅎㅎ

 

실제로 아버지가 이 프로그램으로 오늘 로또 5게임을 하고 오셨습니다.

결과는 장담할 수 없지만, 스스로 코딩한 것을 써볼 수 있는 기회가 되었네요.

 

별 볼 일 없는 프로그램이라도 이렇게 하나 둘씩 만들어 나가면,

언젠가 내공이 쌓여갈 것이라는 기대를 합니다!!

 

정영훈 화이팅 ㅎㅎ


 

지금까지 random 클래스를 활용하여 로또 번호 생성 프로그램을 만들어보았습니다.

 

오늘은 집에서 직접 코딩하셔서 로또 한 게임 어떠세요?

 

다음 포스팅에서 뵙겠습니다.

 

감사합니다 : )

Comments