조건문과 Math.random() 함수를 사용하여 중복 없이 로또 번호를 추출해보았다.
자바를 공부하는 사람이면 모두 한번 쯤은 풀어봤을 것이다.
다양한 방법이 있겠지만 나는 아래와 같은 방법을 사용했다.
1. 크기가 6인 int형 배열을 만든다.
2. 배열의 크기만큼 반복문을 돌려 난수를 발생시키고, 그 난수를 배열에 넣는 과정을 반복한다.
참고:
- Math.random() 함수는 0.0 이상, 1.0 미만의 난수를 발생시킨다.
- 따라서 Math.random()에 45를 곱하면 0.0 이상 45.0 미만의 난수가 발생하는데
- 로또번호는 1~45이므로 마지막에 1을 더해주면 1.0이상 46.0 미만의 난수를 얻을 수 있다.
- 그것을 int형으로 변환하여 최종적으로 1 이상 46 미만인 정수가 나오도록 했다.
3. 위의 2번 과정까지 진행하였을 때, 같은 번호가 중복되는 문제가 발생한다. 중복제거하는 코드가 필요하다.
4. 따라서 방금 얻은 난수인 temp를 현재 배열 num에 입력된 모든 원소와 비교한다.
만약 지금 nums[3]=temp 의 과정을 거쳤다면, nums[0], nums[1], nums[2]까지만 비교하면 되므로 j < i 일때까지만 비교한다.
5. 중복된 원소라면 i 값을 하나 줄여주고 break를 통해 내부 반복문을 빠져나간 뒤 다시 난수 추출을 시작한다. i 값이 하나 줄어들었으므로 중복된 숫자가 들어갔던 인덱스는 새로운 난수로 덮어씌우기 된다.
6. 배열에 중복 없는 6개의 숫자가 모두 채워지면 반복문을 빠져나오게 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package quiz;
public class Lotto {
public static void main(String[] args) {
/*
* 로또번호 추출. 중복 없는 난수 6개를 추출한다. 1~45 사이의 난수여야 한다.
*/
Scanner sc = new Scanner(System.in);
System.out.print("몇 개의 세트를 추출하시겠습니까?\n>> ");
int set = sc.nextInt();
int cnt = 1;
while (set > 0) {
int[] nums = new int[6];
for (int i = 0; i < nums.length; i++) {
nums[i] = temp;
// 중복제거
for (int j = 0; j < i; j++) {
if (nums[j] == temp) {
i--;
break;
}
}
} // for end
System.out.print("\n"+ cnt + "번째 : " );
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
set--;
cnt++;
} // while end
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
출력 :
'IT > Java' 카테고리의 다른 글
07_배열 (0) | 2019.12.05 |
---|---|
06_참조형 데이터 타입 (0) | 2019.12.01 |
04_String 연산자 (0) | 2019.11.29 |
03_정확한 계산 (0) | 2019.11.29 |
02_실수형 데이터 (0) | 2019.11.29 |