jjhhyper   7년 전

아래의 조건문에서 visit배열과 arr배열이 index초과가 난다고 해도,   safe함수를 통해 범위내에 있다고 판단이되면 함수가 수행이 됩는데

그러면 if(safe(c+1,d) && visit[c+1][d]==0 && arr[c+1][d]=='L') 조건문에서

(1)

1. safe함수조건판단  2. visit조건판단 3. arr조건판단 이되는건가요

(2) 조건문이기 때문에 배열이 arr[5][5]크기이지만 arr[100][100]을 조건문에 사용해도 문제없는건가요?



bupjae   7년 전

Java 언어에서

a && b 의 경우 a가 false 인 경우 b를 평가(=실행)하지 않고 전체 수식이 false 로 평가됩니다

a || b 의 경우 a가 true 인 경우 b를 평가하지 않고 전체 수식이 true 로 평가됩니다.


이런 동작을 전문용어로 Short-circuit evaluation 라고 부릅니다.

질문하셨던 상황에서 safe 함수가 false 를 반환하게 되면 visit 배열의 내용을 읽는 부분과 arr 배열의 내용을 읽는 부분이 실행되지 않기 때문에

배열 범위가 초과 예외는 발생하지 않습니다.

jjhhyper   7년 전

단숨에 이해가됬습니다 감사합니다!

그러면 배열 범위가 초과된 arr을 맨 처음에 작성한다면 런타임에러가 뜨게되나요?

bupjae   7년 전

네. if 문 내부의 순서를 바꾸게 되면 배열 범위를 검사하는 safe 함수를 호출하기 전에 배열 내용을 먼저 읽어버리기 때문에 런타임 에러가 발생할 수 있습니다.

jjhhyper   7년 전

저번에도 도움많이됬었는데 이번이도 큰 도움됬네요 

감사합니다!

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