error: array creation with both dimension expression and initialization is illegal

구창회·2023년 5월 20일
0

에러 사전

목록 보기
5/10

배열을 선언할 때 만난 오류.

내 코드는 이러했다.

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;
    }
}

스택오버플로우 위 에러메시지 관련 글

profile
백엔드 엔지니어 프로 지망생

0개의 댓글