Я пытаюсь взять 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
}
Это кажется возможным, и я побеждал голову по этому. Возможно, я делаю простую проблему слишком трудной?
Большое спасибо за справку!
Вы ищете оператор /
:
box[0] = rowInArray / 3;
box[1] = columnInArray / 3;
Если я правильно понимаю, это просто целочисленное деление.
Поскольку вы кодируете Java (по крайней мере, в C, C ++ и C # он будет таким же), это просто оператор /
:
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
.