如何从 Java 中的随机位置开始遍历矩阵
How to traverse a matrix starting from a random position in Java
我正在尝试编写一个简单的 Java 程序,它可以从用户指定的矩阵中的任何位置开始遍历矩阵 (2D-Array)。
我首先声明我的矩阵并用随机数填充它,但我不确定从这里去哪里?我怎样才能从随机位置开始遍历矩阵中的每个单元格?
我只是想了解一些基本的东西,不是很高级,因为我在 Java 方面仍然是初学者,我们将不胜感激!
public static void main(String[] args) {
// Initialize Matrix randomly
int R = 3;
int C = 3;
int[][] matrix = new int[R][C];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix.length; j++) {
matrix[i][j] = ((int) (Math.random() * 2));
}
}
//---------------------------
// Robot Moving Algorithm
int i, j, rows=R, cols=C, m, n;
int Robot_i=0, Robot_j=0;
if (Robot_i==0) {
for (i=Robot_i; i<rows; i++) {
}
}
}
以下是我正在寻找的内容的概述:
8 5 1
7 3 2
6 9 4
预期输出,从第 0 行第 1 列开始:5,1,2,4,9,6,7,8,3
假设我们有这个矩阵:
[9, 5, 9]
[1, 0, 3]
[1, 2, 0]
你也可以认为是一个数组
[9, 5, 9, 1, 0, 3, 1, 2, 0]
并且您可以将矩阵中的任何坐标映射到数组中相应的索引,例如:
2
位于坐标第 2 行,第 1 列的索引为 7
这里有两种方法可以将坐标映射到索引,反之亦然
private static int toIndex(int row, int col, int nbCols) {
return col + row * nbCols;
}
private static int[] toCoords(int index, int nbCols) {
return new int[] { index / nbCols, index % nbCols };
}
这是打印矩阵的实用方法
private static void printMatrix(int[][] matrix) {
for (int[] ints : matrix) {
System.out.println(Arrays.toString(ints));
}
}
现在有了这些工具:
- 计算机器人的起始索引
- 在数组中迭代到末尾(数组的大小为 nbRows * nbCols)。
- 再次开始从索引 0 迭代到机器人的起始索引。
public static void main(String[] args) {
// Initialize Matrix randomly
int nbRows = 3;
int nbCols = 3;
int[][] matrix = new int[nbRows][nbCols];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix.length; j++) {
matrix[i][j] = ((int) (Math.random() * 10));
}
}
printMatrix(matrix);
//---------------------------
// Robot Moving Algorithm
int robotRow = 0;
int robotCol = 1;
int robotStartIndex = toIndex(robotRow, robotCol, nbCols);
for (int i = robotStartIndex; i < nbCols * nbCols; i++) {
int[] coords = toCoords(i, nbCols);
System.out.println(matrix[coords[0]][coords[1]]);
}
for (int i = 0; i < robotStartIndex; i++) {
int[] coords = toCoords(i, nbCols);
System.out.println(matrix[coords[0]][coords[1]]);
}
}
打印出来:
[9, 5, 9]
[1, 0, 3]
[1, 2, 0]
5
9
1
0
3
1
2
0
9
我正在尝试编写一个简单的 Java 程序,它可以从用户指定的矩阵中的任何位置开始遍历矩阵 (2D-Array)。
我首先声明我的矩阵并用随机数填充它,但我不确定从这里去哪里?我怎样才能从随机位置开始遍历矩阵中的每个单元格?
我只是想了解一些基本的东西,不是很高级,因为我在 Java 方面仍然是初学者,我们将不胜感激!
public static void main(String[] args) {
// Initialize Matrix randomly
int R = 3;
int C = 3;
int[][] matrix = new int[R][C];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix.length; j++) {
matrix[i][j] = ((int) (Math.random() * 2));
}
}
//---------------------------
// Robot Moving Algorithm
int i, j, rows=R, cols=C, m, n;
int Robot_i=0, Robot_j=0;
if (Robot_i==0) {
for (i=Robot_i; i<rows; i++) {
}
}
}
以下是我正在寻找的内容的概述:
8 5 1
7 3 2
6 9 4
预期输出,从第 0 行第 1 列开始:5,1,2,4,9,6,7,8,3
假设我们有这个矩阵:
[9, 5, 9]
[1, 0, 3]
[1, 2, 0]
你也可以认为是一个数组
[9, 5, 9, 1, 0, 3, 1, 2, 0]
并且您可以将矩阵中的任何坐标映射到数组中相应的索引,例如:
2
位于坐标第 2 行,第 1 列的索引为 7
这里有两种方法可以将坐标映射到索引,反之亦然
private static int toIndex(int row, int col, int nbCols) {
return col + row * nbCols;
}
private static int[] toCoords(int index, int nbCols) {
return new int[] { index / nbCols, index % nbCols };
}
这是打印矩阵的实用方法
private static void printMatrix(int[][] matrix) {
for (int[] ints : matrix) {
System.out.println(Arrays.toString(ints));
}
}
现在有了这些工具:
- 计算机器人的起始索引
- 在数组中迭代到末尾(数组的大小为 nbRows * nbCols)。
- 再次开始从索引 0 迭代到机器人的起始索引。
public static void main(String[] args) {
// Initialize Matrix randomly
int nbRows = 3;
int nbCols = 3;
int[][] matrix = new int[nbRows][nbCols];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix.length; j++) {
matrix[i][j] = ((int) (Math.random() * 10));
}
}
printMatrix(matrix);
//---------------------------
// Robot Moving Algorithm
int robotRow = 0;
int robotCol = 1;
int robotStartIndex = toIndex(robotRow, robotCol, nbCols);
for (int i = robotStartIndex; i < nbCols * nbCols; i++) {
int[] coords = toCoords(i, nbCols);
System.out.println(matrix[coords[0]][coords[1]]);
}
for (int i = 0; i < robotStartIndex; i++) {
int[] coords = toCoords(i, nbCols);
System.out.println(matrix[coords[0]][coords[1]]);
}
}
打印出来:
[9, 5, 9]
[1, 0, 3]
[1, 2, 0]
5
9
1
0
3
1
2
0
9