gofc13   2년 전

해당 문제는 아래코드로 정답처리 시켜버렸습니다. ( 더 짧고 간결하게 할 수 있겠지만.....)

문제는 예외처리없이 dz를 입력하게되면 37줄에 IndexOutOfRange 발생하는데요. i+2가 범위를 벗어나서 발생하는 것 같은데 처리 방법을 모르겠어서 그냥 넘거벼렸습니다...

해당 에러를 예외처리 시키지 않고 진행하는 방법 부탁드립니다..

wizardrabbit   2년 전

안녕하세요!

디버깅 결과 37번째 줄에서 해당하는 예외가 발생할 수 있음을 확인했습니다.

if (word[i + 1] == 'z' && word[i + 2] == '=')

바로 말씀하신 대로, 'dz=' 인지를 확인하는 부분입니다.

질문자님께서는 i + 1번째 원소를 검사할 때 배열의 범위를 벗어나는 것을 방지하기 위해 35번째 줄에

else if (word[i] == 'd' && i + 1 < word.Length)

를 입력하셨습니다. 확실히 이렇게 하면 word[i + 1]이 마지막 원소를 벗어나 오류가 발생할 수 있는 경우는 걸러질 수 있지요. 하지만 37번째 줄에서는 word[i + 2] 도 검사함을 유의하시기 바랍니다. 이 경우 배열을 벗어날 수 있겠죠.

따라서 말씀하신 예외를 고치기 위해서라면 35번쨰 줄에서 인덱스를 확인한 것처럼 37번째 줄에도 추가로 해당 작업을 해 주시면 되겠지요.

gofc13   2년 전

안녕하세요! @wizardrabbit 님 답변 너무너무너무너무 감사합니다.

말씀하신 것처럼 i + 2 < word.Length 를 맨 앞쪽에 적어야 하는 거였네요...

if (word[i + 1] == 'z' && word[i + 2] == '=' && i + 2 < word.Length)

로 했었다가 안되서 넘겨버렸거든요... 하나로 묶여진? 조건이라 생각해서 어디에 쓰든 전부 검사하지 않을까 생각했는데 아니었네요,,

오늘도 이렇게 배워갑니다ㅎㅎ

댓글을 작성하려면 로그인해야 합니다.