에러 모음

java.lang.StringIndexOutOfBoundsException 발생

junani0v0 2024. 3. 29. 10:58

public static void main(String[] args) {
    String pattern = "abcde";
    System.out.println(Pyramid.watchPyramidFromTheSide(pattern));
    }
    public static String watchPyramidFromTheSide(String characters) {
        for (int i = 0; i < characters.length(); i++) {
            for (int j = 0; j < (characters.length() - 1) - i; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < (i * 2) + 1; j++) {
                System.out.print(characters.charAt(characters.length()-i));
                //문자열에서 특정 위치 문자 가져오기 charAt
            }
            System.out.println();
        }
        return "";
    }

 

< 발생 예외 >

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5

 

< 이유 >

System.out.print(characters.charAt(characters.length( ) - i )) 에서 문자열 인덱스가 범위를 벗어나서 발생

 

문자열 길이가 5인데, 인덱스 5에 접근하려고 하여 발생 java에서 인덱스는 0부터 시작하기 때문에 길이가 5인 문자열의 유효한 인덱스 범위는 0~4까지 임으로 -1을 해줌으로 해결가능

System.out.print(characters.charAt(characters.length( ) - 1 - i )) 

 

< 수정 >

public static String watchPyramidFromTheSide(String characters) {
    for (int i = 0; i < characters.length(); i++) {
        for (int j = 0; j < (characters.length() - 1) - i; j++) {
            System.out.print(" ");
        }
        for (int j = 0; j < (i * 2) + 1; j++) {
            System.out.print(characters.charAt(characters.length()-1-i));
            //문자열에서 특정 위치 문자 가져오기 charAt
        }
        System.out.println();
    }
    return "";
}

 

'에러 모음' 카테고리의 다른 글

AssertionFailedError  (0) 2024.04.08
MissingServletRequestParameterException  (0) 2024.04.08
does not override abstract  (0) 2024.04.05
ClassCastException  (0) 2024.04.02
method does not override  (0) 2024.04.01