gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:50:33 39 4
gpt4 key购买 nike

老实说,我可能想多了,但是如果你有一个 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/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com