개발 완료
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가 들어갑니다
이 코드의 전개가 왜 이렇게 되는지 헷갈릴 때는
결괏값마다 출력을 걸어주면 이해하기 조금 수월합니다.
혹시나 헷갈리는 부분은 댓글 달아주시면,
열심히 고민해보고 알려드리겠습니다
반응형