Арифметическая операция, так что 0, 1, & 2 возвращают 0 |3, 4 и 5 возвращают 1 и т. Д. - PullRequest
1 голос
/ 28 июля 2010

Я пытаюсь взять массивы 9x9, 12x12, 15x15 и т. Д., И программа интерпретирует их как несколько квадратов 3x3.

Например:

0 0 1 0 0 0 0 0 0
0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 3 0
0 0 0 0 0 0 6 0 0
0 0 4 0 0 0 0 0 0
0 0 0 0 0 5 0 0 0
0 0 0 0 0 0 0 0 0
0 7 0 0 0 0 0 0 0
0 0 0 0 8 0 0 0 9

Будет понятнокак:

0 0 1 | 0 0 0 | 0 0 0
0 0 0 | 0 0 2 | 0 0 0
0 0 0 | 0 0 0 | 0 3 0
------+-------+------
0 0 0 | 0 0 0 | 6 0 0
0 0 4 | 0 0 0 | 0 0 0
0 0 0 | 0 0 5 | 0 0 0
------+-------+------
0 0 0 | 0 0 0 | 0 0 0
0 7 0 | 0 0 0 | 0 0 0
0 0 0 | 0 8 0 | 0 0 9

Где:

"1" @ [0][2] is in box "[0][0]"
"2" @ [1][5] is in box "[0][1]"
...
"6" @ [3][6] is in box "[1][2]"
...
"9" @ [8][8] is in box "[2][2]"

.

Я могу использовать row % 3 и column % 3 для определения значений строк и столбцов в блоке,но как определить, в каком ящике хранится данное значение в массиве?

Эту формулу можно использовать в таком методе, как приведенный ниже.

public int[] determineCoordinatesOfBox(int rowInArray, int columnColumnInArray) {
    // determine row value
    // determine column value

    // return new int[2] with coordinates
}

Кажется возможным иЯ бился головой об этом.Возможно, я делаю простую задачу слишком сложной?

Большое спасибо за помощь!

  • Justian

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

Вы ищете оператора /:

box[0] = rowInArray / 3;
box[1] = columnInArray / 3;
0 голосов
/ 28 июля 2010

Если я правильно понимаю, это просто простое целочисленное деление.

Поскольку вы кодируете Java (оно будет таким же, как минимум, в C, C ++ и C #), это просто оператор /:1004 *

int rowInArray = 3;
int columnInArray = 7;

int boxY = rowInArray / 3;    // will evaluate to 1
int boxX = columnInArray / 3; // will evaluate to 2

int rowInBox = rowInArray % 3;       // will evaluate to 0
int columnInBox = columnInArray % 3; // will evaluate to 1

Просто оставьте оба аргумента целочисленного деления - 7 / 3 равно 2, но 7 / 3.0 или 7.0 / 3 будет 2.5.

...