int[] answer = {}; : 메모리에 answer라는 이름의 이름표는 붙였지만, 실제 데이터를 담을 공간(Index)이 0개가 된다. 이후 answer[0] = ...를 선언해주면 0번째 칸에 값을 넣으려고 시도합니다.
→ 에러 발생 : 크기가 0이라 값을 넣을 수 없어 에러
배열 생성 시: 반드시 new int[크기] 처럼 숫자를 넣어줘야 값을 담을 공간이 생긴다.
반복문 주의: st.countTokens()처럼 값이 변하는 메서드는 변수에 담아서 사용
출력: int[] 객체를 그냥 출력하면 주소값이 나오니, 출력할 때 Arrays.toString()사용
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int count =st.countTokens();
int[] arr = new int[count];
for(int i=0; i<count; i++){
arr[i]=Integer.parseInt(st.nextToken());
}
위와 같이 StringTokenizer을 사용해서 countTokens로 배열의 공간 확보, string을 받은 뒤 nextToken으로 배열에 넣어주면 된다.
StringTokenizer st = new StringTokenizer(br.readLine());
ArrayList<Integer> list = new ArrayList<>();
while (st.hasMoreTokens()) {
list.add(Integer.parseInt(st.nextToken()));
입력되는 숫자가 몇 개인지 미리 알 수 없을 때(배열 크기를 정할 수 없을 때) 사용한다
public static int[] solution(int[] num_list, int n) {
int[] answer = new int[n];
for(int i=0; i<n; i++){
answer[i]=num_list[i];
}
return answer;
}
여기서 return answer을 해주면 answer의 주소 반환해준다.
그런데 이때, result가 배열 전체를 잘 받았더라도, 그냥 System.out.println(result);라고 하면 우리가 원하는 [1, 2, 3] 같은 모양이 나오지 않는다.
[I@6d06d69c 같은 이상한 메모리 주소값이 나온다.Arrays.toString(result)를 써야 배열의 값이 다 출력된다.