현재 주변의 모든 셀에있는 데이터에 대해 표 셀을 검사하려고합니다. 위, 아래, 오른쪽, 모든 대각선. 예외 던지기를 사용하면 어떻게면과 모서리를 개별적으로 코딩 할 필요가 없습니까?바운드 예외 예외 발생
이것은 현재 가지고있는 내용입니다. isIsAlive()는 단순히 셀이 "활성"인지 확인합니다. 셀의 이웃은 그 주변의 모든 활성 셀을 포함합니다.
public void calcNeighbors() throws ArrayIndexOutOfBoundsException{
int x =0;
int y =0;
int neighbors = 0;
while(x < 9){
while(y < 9){
if(generation[x+1][y+1].isIsAlive()){
neighbors++;
}
if(generation[x+1][y].isIsAlive()){
neighbors++;
}
if(generation[x+1][y-1].isIsAlive()){
neighbors++;
}
if(generation[x][y-1].isIsAlive()){
neighbors++;
}
if(generation[x-1][y-1].isIsAlive()){
neighbors++;
}
if(generation[x-1][y].isIsAlive()){
neighbors++;
}
if(generation[x-1][y+1].isIsAlive()){
neighbors++;
}
if(generation[x][y+1].isIsAlive()){
neighbors++;
}
y++;
}
x++;
neighbors = 0;
}
}
대답은 다음과 같습니다. 예외적이지 않은 제어 흐름에 대해 예외를 사용하지 마십시오. –
이것은 expections 질문을 통해 비슷한 코드 흐름입니다 : http : // stackoverflow.com/questions/16320014/java-optimization-nitpick-it-faster-to-cast-something-and-let-it-throw-excep/16320082 # 16320082 일반적인 가독성 문제 외에도 다음과 같은 몇 가지 테스트를 수행했습니다. 능률. 그것은 끔찍한 독서를 만듭니다. "너무 오래 읽지 못했습니다"예외는 instanceof보다 20 배 느립니다 (자체적으로 느림) –
일반적 조언; "9"를 사용하는 것은 마법의 숫자입니다; **나쁜**. 배열 크기가 변경되면 array.length를 사용합니다. array [0] .length를 사용하여 두 번째 차원을 얻을 수 있습니다. –