## 작성 내용 아래와 같이 코드를 작성하였습니다. 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); } } ```
# 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배열에 저장 } /* 중복 수 또는 제거할 수를 뽑은 경우, 조취를 취해야 합니다. */ } ```