## 작성 내용
아래와 같이 코드를 작성하였습니다.
1. 중복한 숫자 없고,
2. 입력한 5개 숫자를 제외하여 번호가 나오고,
3. 번호들을 정렬하여 출력하였습니다.
## 질문 내용
하지만 생성번호 값에 '0'이라는 출력이 나오는 것이 이해가 되지않습니다. int generateNumber() 메소드의 (int)(Math.random() * 45) + 1 때문에, 적어도 랜덤숫자가 1이 나와야 하는것 아닙니까?
## 실행 예
```
제거할 숫자들: 5 6 7 8 9
생성 번호: 0 23 28 31 33 42
```
## 작성 코드
```
import java.util.Arrays;
public class Main {
public static int generateNumber() {
return (int) (Math.random() * 45) + 1;// 1~45까지 숫자를 리턴한다.
}
public static void main(String[] args) {
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
int c = Integer.parseInt(args[2]);
int d = Integer.parseInt(args[3]);
int e = Integer.parseInt(args[4]);
System.out.printf("제거할 숫자들: %d %d %d %d %d\n", a, b, c, d, e);
System.out.print("생성 번호: ");
boolean[] isPicked = new boolean[46]; // 46개의 참 거짓 배열생성
int[] numbers = new int[6]; // 6개를 받는 배열numbers생성
for (int i = 0; i < numbers.length; i++) { // 0~45번 임시번호 생성
int tempNum = generateNumber(); // tempNum은 6개의 임시 번호 할당
// 중복된 수가 아니라면
if (isPicked[tempNum] == false && (a != tempNum) && (b != tempNum) && (c != tempNum) && (d != tempNum)
&& (e != tempNum)) { // 배열에 임시번호가 없다면
isPicked[tempNum] = true; // 뽑은 걸로 체크후
numbers[i] = tempNum;// 임시번호를 numbers배열에 저장
}
}
Arrays.sort(numbers); // 오름차순 정렬
for (int n : numbers) // 출력해라
System.out.printf("%d ", n);
}
}
```
sehongpark님의 답변
# if문에 대한 else 처리를 해주세요.
중복 수 또는 제거할 수를 뽑은 경우, 다시 숫자를 뽑아야합니다. (generateNumber() 메소드는 문제가 없습니다.)
## 예상 시나리오
번호를 뽑음.
```
31 -> 23 -> 33 -> 42 -> 33 -> 28
```
중복수가 나온경우 아무런 조취를 취하지 않음. 따라서 초기값 0을 그대로 가지게 됨.
```
[31, 23, 33, 42, 0, 28]
```
위 배열을 정렬하여 최종 결과를 얻음.
```
0 23 28 31 33 42
```
## 오류 구간
```
for (int i = 0; i < numbers.length; i++) {
int tempNum = generateNumber();
if (isPicked[tempNum] == false && (a != tempNum) && (b != tempNum) && (c != tempNum) && (d != tempNum)
&& (e != tempNum)) { // 배열에 임시번호가 없다면
isPicked[tempNum] = true; // 뽑은 걸로 체크후
numbers[i] = tempNum;// 임시번호를 numbers배열에 저장
}
/* 중복 수 또는 제거할 수를 뽑은 경우, 조취를 취해야 합니다. */
}
```