如何从 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