0

Java Mine Sweeper プログラムを作成しています。これまでのところ、カスケードと公開を除いてすべてが順調に進んでいます。StackOverFlowError が発生し続けます。誰かが私を見て助けてくれますか?ありがとう!

public static char[][]revealCell(int xbox, int ybox, char blankboard [] [], char     RevealedBoard [][]){


if( RevealedBoard[ybox][xbox]== 'B'){
blankboard[ybox][xbox]= 'B';
return blankboard;

}else if( RevealedBoard[ybox][xbox]== '1'){
blankboard[ybox][xbox]= '1';
return blankboard;
}

else if( RevealedBoard[ybox][xbox]== '2'){
blankboard[ybox][xbox]= '2';
return blankboard;

}else{
blankboard[ybox][xbox]= '-';

    if( xbox== 0){ // left of the grid 


        if(ybox==0){
        blankboard= revealCell(xbox+1, ybox, blankboard, RevealedBoard);
        blankboard= revealCell(xbox, ybox+1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox+1, ybox+1, blankboard, RevealedBoard);
        return blankboard;
        }else if( ybox== 7){
        blankboard= revealCell(xbox+1, ybox, blankboard, RevealedBoard);
        blankboard= revealCell(xbox, ybox-1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox+1, ybox-1, blankboard, RevealedBoard);              
        return blankboard;
        }else{
        blankboard= revealCell(xbox+1, ybox, blankboard, RevealedBoard);
        blankboard= revealCell(xbox, ybox-1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox +1, ybox-1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox, ybox+1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox+1, ybox+1, blankboard, RevealedBoard);
        return blankboard;
        }

    }else if(xbox== 7){// right of the grid
    blankboard= revealCell(xbox-1, ybox, blankboard, RevealedBoard);

        if(ybox== 7){
        blankboard= revealCell(xbox, ybox-1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox-1, ybox-1, blankboard, RevealedBoard);
        return blankboard;
        }else if( ybox==0){                                                             
        blankboard= revealCell(xbox, ybox+1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox-1, ybox+1, blankboard, RevealedBoard);
        return blankboard;
        }else{
        blankboard= revealCell(xbox-1, ybox-1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox-1, ybox+1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox, ybox-1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox, ybox+1, blankboard, RevealedBoard);
        return blankboard;
        }

    }else{
        if(ybox== 0){
        blankboard= revealCell(xbox-1, ybox, blankboard, RevealedBoard);
        blankboard= revealCell(xbox, ybox+1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox-1, ybox+1, blankboard, RevealedBoard);
        return blankboard;
        }else if( ybox==7){
        blankboard= revealCell(xbox-1, ybox, blankboard, RevealedBoard);
        blankboard= revealCell(xbox, ybox-1, blankboard, RevealedBoard);
        blankboard= revealCell(xbox-1, ybox-1, blankboard, RevealedBoard);
        return blankboard;
        }else{
    blankboard= revealCell(xbox, ybox-1, blankboard, RevealedBoard);
    blankboard= revealCell(xbox-1, ybox-1, blankboard, RevealedBoard);
    blankboard= revealCell(xbox+1, ybox-1, blankboard, RevealedBoard);
    blankboard= revealCell(xbox-1, ybox+1, blankboard, RevealedBoard);
    blankboard= revealCell(xbox, ybox+1, blankboard, RevealedBoard);
    blankboard= revealCell(xbox-1, ybox, blankboard, RevealedBoard);
    blankboard= revealCell(xbox+1, ybox, blankboard, RevealedBoard);
    blankboard= revealCell(xbox+1, ybox+1, blankboard, RevealedBoard);

    }
    }



}
return blankboard;
}

}

RevealCell は私のメソッドであり、学校での実際のクラスでは再帰を使用する必要があります。これが私たちがすべきことだと思いましたが、エラーが発生しています。

4

1 に答える 1

0

再帰の停止条件を確認してください。「B」、「1」、または「2」しか取得できないと確信していますか?セルに 3 つの地雷があるとどうなりますか? ちなみに、セルを明らかにするたびに(範囲外を含む)すべての隣接セルをチェックし、関数の開始時に有効なセル((xbox > = 0 && xbox <=7) ||(ybox>=0 && ybox<=7))、有効なセルでない場合は配列をそのまま返します。

于 2013-04-09T23:44:20.363 に答える