java - 二维 boolean 数组垂直、水平和对角线赋值

标签 java arrays

老实说,我可能想多了,但是如果你有一个 boolean[8][8] 数组并且其中的值为 true,你将如何使所有水平、垂直和对角线值也为真?

例如,给定 [X],我如何使所有其他值也为 X:

0 0 X 0 0  X  0 0
0 0 0 X 0  X  0 X
0 0 0 0 X  X  X 0
X X X X X [X] X X
0 0 0 0 X  X  X 0
0 0 0 X 0  X  0 X
0 0 X 0 0  X  0 0
0 X 0 0 0  X  0 0

现在我可以做垂直和水平的了:

for(int i = 0; i < 8; i++){
    for (int l = 0; l < 8; l++){
        if (boolean[i][l]){
            for (int k = 0; k < 8; k++){
                boolean[i][k] = true;
                boolean[k][l] = true;}
            }
        }
   }

最佳答案

首先,在您的循环中,一旦找到第一个真值,您就需要一个分离变量。我建议将 boolean 值 isFound 作为 for 循环中的条件之一。除此之外,这是我的处理方式(注意:这将放置在循环中垂直/水平的正下方):

//positive slope diagonal
if(((i - Math.min(i, l)) + k) < 8 && ((l - Math.min(i, l)) + k) < 8)
    testArray[(i - Math.min(i, l)) + k][(l - Math.min(i, l)) + k] = true;

//negative slope diagonal
if((k) < 8 && ((l + i) - k) >= 0 && ((l + i) - k) < 8)
    testArray[k][(l + i) - k] = true;

在这个例子中,两条对角线分开了。对于第一个对角线,我检查以确保它的位置在数组的边界内(稍后我将解释如何确定位置。)其次,我确定每个对角线的起始位置的 X 和 Y 值,位于在括号中。最后,我通过从起始位置在 X 和 Y 方向(逐步)移动 K 个单位以对角线遍历网格来找到位置。对于指向另一个方向的诊断重复相同的操作,但是 X 值减去而不是添加 K,因为对角线指向相反的方向。通过调整位置或绘制我的算法,可以最好地找到起始位置和移动的确切逻辑。

例如。 enter image description here

放置(请注意,我添加了变量以确保在找到一个真实值后停止):

    boolean notFound = true;

    for(int i = 0; i < 8 && notFound; i++){
        for (int l = 0; l < 8 && notFound; l++){
            if (testArray[i][l]){
                for (int k = 0; k < 8; k++){
                    testArray[i][k] = true;
                    testArray[k][l] = true;

                    if(((i - Math.min(i, l)) + k) < 8 && ((l - Math.min(i, l)) + k) < 8)
                        testArray[(i - Math.min(i, l)) + k][(l - Math.min(i, l)) + k] = true;

                    if((k) < 8 && ((l + i) - k) >= 0 && ((l + i) - k) < 8)
                        testArray[k][(l + i) - k] = true;       
                }
                notFound = false;
             }
         }
     }

关于java - 二维 boolean 数组垂直、水平和对角线赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43773021/

相关文章:

c++ - C++ 数组可以在内存边界结束吗?

java - 使用接口(interface)有什么好处

java - 循环依赖——总是错的?

javascript - 如何使用多个键按对象的值对对象进行排序?

Javascript,具有设置生命周期的对象?

java - 如何像存储在二维数组中一样访问数组中的数据?

javascript - 如何使用 HTML 中的本地存储将数据存储在数组中?

java - Spingfox 在为 swagger 生成 JSON 模型时无法识别自定义序列化程序

java - Intellij Groovy 编译器抛出错误 Grabbing Grapes (download failed)

JavaFX:如何创建带有通知徽章的应用程序图标?