#java #vector
#java #вектор
Вопрос:
Я объявил вектор 2D-массива в java. На каждом шаге я добавляю массив в вектор с помощью метода add (). Но когда я распечатываю этот вектор, чтобы посмотреть, что внутри, я получаю неожиданный результат. Ни один из этих массивов не является данными, которые были добавлены. Мой код:
static Vector<int[][]> latinSquare;
static int[][] square;
static int[][] maskRow, maskCol;
static int[] extractCoor(int x, int n) {
int[] ans = new int[2];
ans[0] = x / n;
ans[1] = x % n;
return ans;
}
static void backtrack(int pos, int n) {
int[] coor = extractCoor(pos, n);
int x = coor[0], y = coor[1];
for (int candidate = 0; candidate < n; candidate ) {
if (maskRow[x][candidate] == 0 amp;amp; maskCol[y][candidate] == 0) {
square[x][y] = candidate;
if (pos == n * n - 1) {
latinSquare.add(square);
printArr(square, n, n);
} else {
maskRow[x][candidate] = 1;
maskCol[y][candidate] = 1;
backtrack(pos 1, n);
maskRow[x][candidate] = 0;
maskCol[y][candidate] = 0;
}
}
}
}
Когда я распечатываю square
, у меня есть правильный список латинского квадратного размера n = 3.
0 1 2
1 2 0
2 0 1
0 1 2
2 0 1
1 2 0
0 2 1
1 0 2
2 1 0
0 2 1
2 1 0
1 0 2
1 0 2
0 2 1
2 1 0
1 0 2
2 1 0
0 2 1
1 2 0
0 1 2
2 0 1
1 2 0
2 0 1
0 1 2
2 0 1
0 1 2
1 2 0
2 0 1
1 2 0
0 1 2
2 1 0
0 2 1
1 0 2
2 1 0
1 0 2
0 2 1
Но когда я распечатываю вектор latinSquare
, у меня неверный вывод:
static void latinSquareBuilder(int n) {
latinSquare = new Vector<int[][]>();
maskRow = new int[n][n];
maskCol = new int[n][n];
square = new int[n][n];
backtrack(0, n);
for (int i = 0; i < latinSquare.size(); i )
printArr(latinSquare.get(i), n, n);
}
static void printArr(int[][] arr, int n, int m) {
for (int i = 0; i < n; i ) {
for (int j = 0; j < m; j ) {
System.err.print(arr[i][j] " ");
}
System.err.println();
}
System.err.println();
}
Вывод:
2 1 0
1 2 2
0 2 1
2 1 0
1 2 2
0 2 1
2 1 0
1 2 2
0 2 1
2 1 0
1 2 2
0 2 1
2 1 0
1 2 2
0 2 1
2 1 0
1 2 2
0 2 1
2 1 0
1 2 2
0 2 1
2 1 0
1 2 2
0 2 1
2 1 0
1 2 2
0 2 1
2 1 0
1 2 2
0 2 1
2 1 0
1 2 2
0 2 1
2 1 0
1 2 2
0 2 1
Ответ №1:
Это потому, что квадрат является матрицей, а latinSquare — вектором. Посмотрите здесь
Комментарии:
1. Я не понимаю, что вы имеете в виду. Я просто использую векторную встроенную библиотеку java для хранения списка 2D-массива, я не выполняю никаких математических операций с этими данными.
2. Попробуйте этот способ latinSquare = new Vector<int>[][] ();