-
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가 들어갑니다
이 코드의 전개가 왜 이렇게 되는지 헷갈릴 때는
결괏값마다 출력을 걸어주면 이해하기 조금 수월합니다.
혹시나 헷갈리는 부분은 댓글 달아주시면,
열심히 고민해보고 알려드리겠습니다
반응형'개발 완료' 카테고리의 다른 글
(Java)자바로 가위바위보 게임 만들기(2) (0) 2020.04.02 (Java)자바로 가위바위보 게임 만들기(1) (0) 2020.04.02 Java 배열을 이용한 합계/평균, 최대값/최소값, 섞기(Shuffle) (2) 2020.03.27 Java 특정배수가 아닌 값의 총합 (0) 2020.03.17 Java 다양한 구구단 만들기 (0) 2020.03.17