[해결] 단순 대소문자 오타 Collections.shuffle( 배열 ); => Collections의 C 반드시 대문자로!! [질문] 왜 에러인지 모르겠습니다 ㅠ # 로또 번호 생성기 #### CODE <a class='btn btn-default' href='/codes/23548'>Link</a> ``` import java.util.ArrayList; import java.util.Collections; public class Main { public static void main (String[] args) { //배열 nums는 : 1 ~ 45 까지 랜덤한 숫자 ArrayList<Integer> nums = new ArrayList<Integer>(); for(int i = 1; i <= 45; i++){ nums.add(i); } collections.shuffle(nums); //배열 nums에서 => 6개 뽑자 int[] pickedNum = new int[6]; System.out.print("생성 번호: "); for(int k = 0; k < pickedNum.length; k++){ pickedNum[k] = nums.remove(k); System.out.printf("%d ", pickedNum[k]); } } } ``` #### INPUT ``` ``` #### OUPUT ``` /root/var/tmp/2020_05_23_11_22_57_29336bd9/Main.java:14: error: cannot find symbol collections.shuffle(nums); ^ symbol: variable collections location: class Main 1 error ```
# 자바 API는 대소문자를 구분합니다. 아래와 같이 코드를 변경해보세요. ``` # 변경 전 collections.shuffle(nums); # 변경 후 Collections.shuffle(nums); ``` ## PS. 질문 감사합니다!
import java.util.Collections 의 의미는 java.util 패키지에 존재하는 Collections클래스를 현재 클래스에서 가져다 쓰겠다는 의미입니다. 즉 shuffle메소드는 Collection 인터페이스에 선언된 추상메소드 인데 Collections클래스가 Collection인터페이스를 구현해서 shuffle메소드를 재정의 한것입니다. 그러므로 shuffle메소드를 호출할때 클래스명.메소드명 즉 Collections.shuffle() 형식으로 호출해 주어야 합니다.
아 대소문자 오타였네요 감사합니다 ㅠㅠ [2차 질문] 이 정답 코드 말고 다른 비슷한 문제의 정답 코드 대로 풀었습니다 (쉬워서) 이 어려운 정답 코드 대로 하는 이유가 있나요? 학습의 이유인가요? 특히 이 부분이 너무 어려웠습니다 (이해는 완료) ``` => 임의의 수 6개 추출 for (int i = 0; i < 6; i++) { pickedNumbers[i] = numbers.remove(rand.nextInt(numbers.size())); } ```
# 맞습니다. 정답 코드는, 학습에 목적이 있습니다. Collections를 사용하지 않은, Random과 ArrayList만으로 구현한 예가 되겠습니다.