两个int数组之间的比较结果出乎意料



我正在尝试比较两个棋盘(由int[][]表示(。我也用C++编写了同样的算法,在比较棋盘是否相等时没有问题。

我试图在这里发布最相关的代码。关于"二维"数组之间的比较,我是否遗漏了一些Java基础知识?或者它可能与内存/存储有关,因为它没有整理出解决方案的副本?我试图为列表中的棋盘分配新的内存,但这以无休止的循环结束。

对于每个迭代和集合,我还使用了多种方法来比较板,甚至使用.equals、.deepEquals。

这是比较函数的代码片段,用于检查相等性,并且在每次镜像和旋转时由TrulyUnique函数调用。我正在比较两个类型为int[][]的变量,称为storeCurrentBoardplayboard

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;
}
}
}
}

您已将isPresentInList = true注释掉。取消注释。按照你现在的方式,如果isPresentInList被设置为false,它将始终保持为false,这样之后你的所有板将永远不相等。

boolean isPresentInList;
int [][] storeCurrentBoard;
for(int k = 0; k < QList.size(); k++)
{
isPresentinList = true; //This is necessary for everything to work
storeCurrentBoard = QList.get(k);
outer: 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 outer;
}
}
}
}

最新更新