Сравнение результатов двух массивов int неожиданно - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь сравнить две шахматные доски (обозначенные int[][]). Я написал тот же алгоритм на C ++, и у меня не было проблем при сравнении шахматных досок на равенство.

Я пытаюсь разместить здесь наиболее подходящий код. Есть ли какие-то Java основные принципы, которые я пропустил при сравнении между «двумерными» массивами? Или это может быть связано с памятью / хранилищем, потому что не разбираются дубликаты решений? Я попытался выделить новую память для шахматных досок в списке, но это заканчивается бесконечным l oop.

. Я также использовал несколько способов сравнения досок даже с .equals, .deepEquals для каждой итерации и sets.

Это фрагмент кода из функции сравнения, которая проверяет равенство и вызывается функцией 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;
                    }
                }
            }
        }

1 Ответ

0 голосов
/ 05 мая 2020

Вы isPresentInList = true закомментировали. Раскомментируйте это. То, как вы это делаете прямо сейчас, если isPresentInList когда-либо будет установлено на 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;
                }
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...