Я не понимаю, почему test [number-1] дублируется и возвращает разные логические значения - PullRequest
0 голосов
/ 17 апреля 2020

Вот субкод вычисления, если данная матрица является квадратом c. Я только запутался с тестом [элемент -1], который продублирован и имеет два разных результата.

public static boolean testNormal(int[][] matrix, int dim){

    int magicConstant = dim * (dim * dim +1) / 2;

    // checks if all the numbers are present
    // the default value is false
    boolean[] test = new boolean[dim*dim];
    int max = dim*dim;
    int element;
    for (int row = 0; row < dim; row++){
        for (int col = 0; col < dim; col++){
            element = matrix[row][col];
            if ((element > max)|| (element <= 0))
                return false;
            if (test[element -1])
                return false;
            test[element -1] = true;
        }
    }

1 Ответ

1 голос
/ 17 апреля 2020

Код не очень хорошо отформатирован, на мой вкус:

for (int col = 0; col < dim; col++){
    element = matrix[row][col];
    if ((element > max)|| (element <= 0)) {
        return false;
    }
    if (test[element -1]) {
        return false;
    }
    test[element -1] = true;
}

Запись этого слова должна немного прояснить ситуацию.

Так что объяснять, если (test [element -1) ]) получает логическое значение в позиции 'element - 1' из тестового массива, если оно принимает значение true, мы вводим оператор if и возвращаем false. Следующая строка не выполняется, так как мы возвращаем.

Если она имеет значение false, мы не вводим оператор if, и значение test [element - 1] равно , устанавливают в значение true.

Так что это не дублирование, единственное, что разделяют экземпляры, - это то, что они получают доступ к одной и той же позиции в массиве. Первый экземпляр получает и оценивает что-то из тестового массива, а второй экземпляр устанавливает что-то в тестовом массиве.

...