首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矿井周围的扫雷船一半时间都在工作

矿井周围的扫雷船一半时间都在工作
EN

Stack Overflow用户
提问于 2017-01-01 21:01:38
回答 3查看 549关注 0票数 0

我正在用Java编写扫雷器克隆人,我在计算周围炸弹数量的部分上遇到了一些麻烦。由于某种原因,有些细胞检测到更多的炸弹,或者根本没有炸弹(甚至奇怪的是,有些细胞工作得很好)。有人能帮忙吗?谢谢!

注意:key[][]是一个int[][]数组,用于记录炸弹的位置,指定为9。

0表示空空间。

int count表示围绕每个单元格的8个单元格中的炸弹数量(这就是为什么我也有8个试图捕获循环来解释边界单元格)。

ps:很抱歉格式化错误。

编辑:我发现了我的问题出在哪里(我给我打了两次电话)。对于如何使这段代码更简单、更有效,有什么建议吗?

代码语言:javascript
复制
private void numberSet() {

    int count = 0;
    for (int i = 0; i < key.length; i++) {
        for (int a = 0; a < key[0].length; a++) {

            if (key[i][a] == 0) {

                try {
                    if (key[i + 1][a] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i - 1][a] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i][a + 1] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i][a - 1] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i + 1][a + 1] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i - 1][a + 1] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i + 1][a - 1] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i - 1][i - 1] == 9) {
                        count++;

                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                key[i][a] = count;
            }
            count = 0;
        }
    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-01 21:33:56

我会认真考虑彻底放弃你的做法。当我第一次开始编码的时候,我也做了一个扫雷游戏,我做了你正在做的事情。经过几次修改后,我能够把所有的内容都放在几个循环中。我试着在代码中进行足够的注释,告诉您每一行都做什么。这段代码没有经过测试,所以它可能不会马上工作,完全诚实。然而,我看了几遍,这似乎对我来说是可行的。我建议你接受这段代码,试着让它发挥作用。试试看。

代码语言:javascript
复制
//For every Cell on the board
for (int i = 0; i < key.length; i++){
    for (int a = 0; a < key[0].length; a++){

        //If it Is not a mine
        if (key[i][a] == 0){ 
            int count = 0;

            //Position of cells around key[i][a] relative to key[i][a]
            for (int x = -1; x < 2; x++){  
                for (int y = -1; y < 2; y++){ 

                    //Storing x and y test points
                    int testX = i + x;//testX = i-1, i, and i+1
                    int testY = i + y;//testY = i-1, y, and y+1

                    //If the testX and testY values are within the range of the array
                    if ((testX >= 0 && testX < key[0].length) && testY >= 0 && testY < key.length){

                        //If there is a mine
                        if (key[testX][testY] == 9){
                            count++;
                        }
                    }
                }
            }

            key[i][a] = count;

            //count = 0; This is redundant. Line 7 count gets set to 0.
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2017-01-01 21:20:59

看起来您误用了continue语句,它会将执行移回for循环,因此无法完成各种检查以增加count

catch语句中,您应该什么也不做。

票数 2
EN

Stack Overflow用户

发布于 2017-01-01 21:21:42

代码语言:javascript
复制
if(key[i-1][i-1] == 9){

这看起来和你所有其他的不一样,它有I和a,这个用了我两次。也许这就是你的问题?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41419004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档