여행을 개발하다
Random 클래스를 활용하여 lotto 번호 추출 프로그램 만들기 본문
안녕하세요 : )
오늘은 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 클래스를 활용하여 로또 번호 생성 프로그램을 만들어보았습니다.
오늘은 집에서 직접 코딩하셔서 로또 한 게임 어떠세요?
다음 포스팅에서 뵙겠습니다.
감사합니다 : )
'BackEnd > Java' 카테고리의 다른 글
클래스의 상속(Inheritance) (0) | 2019.05.14 |
---|---|
StringTokenizer, hasMoreTokens(), nextToken() (0) | 2019.05.14 |
Random 메소드 (0) | 2019.05.13 |
Date, SimpleDateFormat, currentTimeMillis() (0) | 2019.05.13 |
String 관련 Method (Length(), toUpperCase(), toLowerCase(), charAt(index), substring(a)...) (0) | 2019.05.13 |