나는이 일을해야하는 방법이 시도/catch 문시도/캐치와 루프 제어
public int MakeMove() {
int x = 0; //counter for moves
try {
// tests to see if potential move has been reached
if (board[currentRow + (vertical[x])][currentColumn + (horizontal[x])] != 0) {
// increments x until a good move is reached.
while ((board[currentRow + (vertical[x])][currentColumn + (horizontal[x])] != 0)) {
x++;
if (x == 8) { //breaks if all moves are tried
return 1;
}
}
}
}
//should catch any tries to move piece off board, catches the exception and increments x
catch(ArrayIndexOutOfBoundsException e) {
x++;
if(x == 8) {//breaks if all moves are tried
return 1;
}
}
에 대한 혼란 스러워요 : 수평 [] 및 수직 [] 두 INT []의 각각의 값을 유지하는 체스 나이트의 가능한 움직임, 즉 수평 2 개와 수직 1 개가 하나의 이동이됩니다. 그런 다음 "제곱"에 0이 아닌 movenumber를 지정해야합니다. try/catch 비트는 보드 밖으로 이동을 잡아서 x를 증가시킨 다음 루프를 다시 통과해야합니다. 그러나 그것이 성명서를 통과 할 때마다 그것은 다시 처음이라면 통과하지 못한다. 대신 두 번째 if로 이동하여 예외를 생성합니다. 나는 어떤 명령문이 그런 식으로 통제권을 되돌릴 지 확신하지 못한다.
미래의 설계를 위해서, 당신은 정상적인 프로그램 로직의 일부로 예외를 사용해서는 안됩니다. –
+1 Chris. @Alex, 예외가 발생하지 않는 방식으로 코드를 구조화하려고합니다. 그들은 EXCEPTions이지, EXPECT는 아닙니다. :-) – corsiKa
try-catch 예외 처리를 흐름 제어 구조로 사용하지 마십시오. 예외 처리만을위한 것입니다. IMHO 이것은 가난한 Java 코드입니다. – PeterMmm