배열을 선언할 때 만난 오류.
내 코드는 이러했다.
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> hash = new HashMap<>();
int[] answer = new int[2]; // 배열의 사이즈를 정해서 선언하고..
for (int i = 0; i < nums.length; i++) {
if (hash.containsKey(nums[i])) {
answer = {hash.get(nums[i]), i}; // 배열에 값을 넣어줬을 뿐. 그런데 오류가?
} else {
hash.put(target - nums[i], i);
}
}
return answer;
}
}
그런데 위와 같은 오류가 나버렸다.
해결책을 알고 보니 에러 메시지가 상당히 직관적인 것을 깨달았다.
배열의 사이즈 선언과 초기화(데이터 넣기)는 동시에 이루어 질 수 없다는 것!
내 코드를 보면 배열의 사이즈를 2로 정한뒤
아래에서 {hash.get(nums[i]), i} 를 통해 초기화를 해주었는데 이러면 안된다는 것이다.
오류를 해결하기 위해서는 빈 브래킷을 사용해서 초기화를 하거나, 사이즈를 정한뒤 인덱스로 접근해 하나하나 값을 넣으면 된다.
방법 1.
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> hash = new HashMap<>();
int[] answer = new int[]; // 배열의 사이즈를 사용하지 않은 빈 브래킷을 사용하고
for (int i = 0; i < nums.length; i++) {
if (hash.containsKey(nums[i])) {
answer = {hash.get(nums[i]), i}; // 초기화한다 -> 오류 해결!
} else {
hash.put(target - nums[i], i);
}
}
return answer;
}
}
방법 2.
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> hash = new HashMap<>();
int[] answer = new int[2}; // 배열의 사이즈를 정한뒤
for (int i = 0; i < nums.length; i++) {
if (hash.containsKey(nums[i])) {
answer[0] = hash.get(nums[i]); // 인덱스로 접근해 값을 넣어준다!
answer[1] = i; // 오류 해결!
} else {
hash.put(target - nums[i], i);
}
}
return answer;
}
}