【问题标题】:Cascading and Reveal for JavaJava 的级联和显示
【发布时间】:2013-04-09 22:44:34
【问题描述】:

我正在制作一个 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 是我的方法,对于我在学校的实际课程,我们必须使用递归。我认为这是我们应该做的,但我遇到了错误。

【问题讨论】:

  • 手动指定每个方向来检查多个地方是丑陋的。使用这样的枚举解决方案:pastebin.com/06yNW2TD 并编写一个方法来检查访问是否超出范围,如果不是,则不执行任何操作。然后在每个地方你都可以在同一个Direction枚举循环中尝试所有方向。

标签: arrays methods recursion char minesweeper


【解决方案1】:

检查你的递归​​的停止条件,你确定你只能得到'B','1'或'2',当一个单元格有3个地雷时会发生什么?顺便说一句,我认为如果每个单元格显示您检查所有邻居(包括越界)并且在函数开始时检查是否是有效单元格((xbox >=0 && xbox =0 && ybox

【讨论】:

  • 好的,谢谢,我实际上能够通过检查停止条件并编辑一些 if 语句来修复它。感谢您的意见!
猜你喜欢
  • 2018-10-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2011-01-18
  • 1970-01-01
相关资源
最近更新 更多