2013-04-09 57 views
0

我在做一個Java掃雷程序。到目前爲止,除了級聯和揭示外,一切都進展順利。我一直在得到StackOverFlowError。有人可以看看並幫助我嗎?謝謝!級聯和顯示的Java

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是我的方法,對於我在學校的實際班級,我們必須使用遞歸。我認爲這是我們應該做的,但我得到錯誤。

+0

手工指定每一個方向在多個地方檢查是醜陋的。使用像這樣的枚舉解決方案:http://pastebin.com/06yNW2TD然後編寫一個方法來檢查訪問是否超出限制,如果不允許則不做任何事情。然後在每個地方,您都可以在同一個'方向'枚舉循環中嘗試所有方向。 – Patashu 2013-04-09 23:56:23

回答

0

檢查你的遞歸​​,你確定你只能得到「B」,「1」或「2」,當一個單元有3個礦會發生什麼的停止條件?順便說一句,我覺得如果是一個有效的單元格的遞歸可以簡化如果每一個細胞都透露出你檢查所有的鄰居(包括出界),並在你的函數的開頭你檢查((的Xbox> = 0 & &的Xbox < = 7)||(ybox> = 0 & & ybox < = 7)),如果它不是一個有效的細胞返回數組原樣。

+0

好的感謝的人我實際上能夠通過檢查停止條件和編輯一些如果說明來解決它。感謝您的輸入! – mercedesbrenz 2013-04-10 03:19:25