【发布时间】:2020-05-04 18:41:51
【问题描述】:
我正在尝试比较两个棋盘(由int[][] 表示)。我也用 C++ 编写了相同的算法,并且在比较棋盘是否相等时没有问题。
我正在尝试在此处发布最相关的代码。关于“二维”数组之间的比较,我是否遗漏了任何 Java 基础知识?或者它可能与内存/存储相关,因为它没有整理出解决方案的重复项?我试图为列表中的棋盘分配新内存,但这以无限循环结束。
我还使用了多种方法来比较板子,即使是 .equals、.deepEquals,也适用于每次迭代和集合。
这是比较函数中的代码 sn-p,用于检查是否相等,并在每次镜像和旋转时由 TrulyUnique 函数调用。我正在比较 2 个类型为 int[][] 的变量,称为 storeCurrentBoard 和 playboard。
int [][] storeCurrentBoard;
for(int k = 0; k < QList.size(); k++)
{
//isPresentinList = true;
storeCurrentBoard = QList.get(k);
for(int i = 0; i < playboard.length; i++)
{
for(int j = 0; j < playboard[i].length; j++)
{
if(playboard[i][j] != storeCurrentBoard[i][j])
{
isPresentinList = false;
break;
}
}
}
}
【问题讨论】:
-
playboard[][] 是 int[][] 还是 Integer[][] ?
-
@Hades playboard[][] 是 int[][]。对于 deepEquals,我使用了 Integer,但结果是一样的。
-
isPresentInList = true被注释掉是有原因的吗?因为不应该。否则,一旦设置为 false,它将始终保持为 false。 -
抱歉,我应该发布整个函数...在函数开始时它设置为 true!
-
那就是问题所在。每次进入外部 for 循环时,它都应该设置为 true。取消注释
//isPresentInList = true部分