[Java]variable might not have been initialized

이현성·2023년 11월 16일

에러 모음

목록 보기
2/2
class Solution {
    public int[] solution(int n, int[] slicer, int[] num_list) {
        int[] answer;
        int a = slicer[0];
        int b = slicer[1];
        int c = slicer[2];
        int cnt = 0;
        
        switch(n){
            case 1: answer = new int[b + 1];
                for(int i = 0; i <= b; i++){
                    answer[cnt] = num_list[i];
                    cnt++;
                }
                break;
            case 2: answer = new int[num_list.length - a];
                for(int i = a; i < num_list.length; i++){
                    answer[cnt] = num_list[i];
                    cnt++;
                }
                break;
            case 3: answer = new int[b - a + 1];
                for(int i = a; i <= b; i++){
                    answer[cnt] = num_list[i];
                    cnt++;
                }
                break;
            case 4: answer = new int[(b - a + 2) / c];
                for(int i = a; i <= b; i += c){
                    if(cnt == (b - a + 2) / c) break;
                    answer[cnt] = num_list[i];
                    cnt++;
                }
        }
        return answer;
    }
}

/Solution.java:35: error: variable answer might not have been initialized

문제를 풀던 중 위와 같은 에러가 발생하였습니다.
반환할 변수 answer가 초기화되지 않았다는 내용인데, 처음에는 왜 이런 에러가 발생하는지 이해하지 못했습니다. 배열 answer를 선언하고 case문에서 초기화했는데 왜 초기화되지 않았다는 에러가 나오는지 이해가 가지 않았습니다.
그래서 switch문을 사용하는 다른 사례들을 살펴보니 대부분 case문 맨 아래에 default문이 들어가있었었습니다. 그래서 혹시 if문의 else처럼, 모든 경우를 커버하지 않아서 발생하는 문제인가 싶어서 case 4를 default로 변경해봤습니다. 그랬더니 에러 없이 잘 실행되는 것을 확인했습니다.
다음으로 문제에서 정의된 n의 범위가 1, 2, 3, 4로 한정되어 있어서, default로 처리하면 마지막 4 외에 다른 수가 올 때도 실행될 수 있기에 이 방법이 아닌 다른 방법을 찾아봤습니다.
그렇게 찾다 보니, 처음 answer 배열을 선언할 때 int[] answer = null; 이렇게 빈 값을 넣어주면 default를 추가하지 않더라도 문제없이 실행되는 것을 확인했습니다.

0개의 댓글