我正在尝试比较两个棋盘(由int[][]
表示(。我也用C++编写了同样的算法,在比较棋盘是否相等时没有问题。
我试图在这里发布最相关的代码。关于"二维"数组之间的比较,我是否遗漏了一些Java基础知识?或者它可能与内存/存储有关,因为它没有整理出解决方案的副本?我试图为列表中的棋盘分配新的内存,但这以无休止的循环结束。
对于每个迭代和集合,我还使用了多种方法来比较板,甚至使用.equals、.deepEquals。
这是比较函数的代码片段,用于检查相等性,并且在每次镜像和旋转时由TrulyUnique函数调用。我正在比较两个类型为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;
}
}
}
}
您已将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;
}
}
}
}