5

我已经习惯了Matlab可以制作矩阵并获取A[i][j]诸如此类的东西的功能。现在我正在使用 Java,我们只能使用一维数组。我想使用嵌套的 for 循环修改条目(i:for 行和 j:for 列),但如果它们存储在一维数组中,我不确定如何访问它们。有人可以帮我吗?有多难?

4

5 回答 5

7
 int rows = 3;
 int cols = 4;
 int[] array = new int[rows*cols];
 int[] currentRow = new int[cols];
 for (int i = 0; i < rows; ++i) {
     for (int j = 0; j < cols; ++j) {
         currentRow[j] = array[i*cols + j];
     }
 }
于 2013-03-30T19:06:46.673 回答
5
private int getElem(int[] arr, int i, int j){
  return arr[i*colNum+j];
}
于 2013-03-30T19:15:39.350 回答
1

请注意,在 Java 中,您还可以像这样使用 2D 数组:

int[][] my2DArr = new int[4][3]; //creates a 2D array with 4 rows and 3 columns
int value = my2DArr[2][1]; //gets the value at row 2 and column 1

现在,如果您必须使用表示二维数组的一维数组,如果您知道列数和行数,您可以做一些简单的数学运算来找出给定行、列对的位置。请参见此处: 将 2D 数组转换为 1D 数组

于 2013-03-30T19:06:09.577 回答
1

我希望我能正确理解这一点。

假设您有一个 10x10 二维数组,并且您希望它是一维的。

您可以使 array[0] 到 array[9] 成为二维数组的第一行。那么array[10]到array[19]就是二维数组的第二行。

可能有一种更有效的方法来做到这一点。

于 2013-03-30T19:10:51.277 回答
1

计算机跟踪的所有数组都是一维的,因为它们存储在其中的顺序内存位置(C 编程:现代方法 - KNKing)。因此,如果您想像使用二维数组一样使用一维数组,只需执行以下操作:(使用字符串数组的示例)

String str[] = {"a", "b", "c", "d", "e", "f"};

这就像:

String str[][] = {{"a", "b", "c"}, {"d", "e", "f"}};

因此,您可以手动指定有多少行和列,因此在上面str[][]有 2 行和 3 列或数字的任何其他排列(1 和 6、3 和 2、6 和 1)。只需像这样编写代码:

int rows = 2;
int cols = (str.length / rows);
for (int i = 0; i < rows*cols; i+=cols)
    for (int j = 0; j < cols; j++)
        System.out.println(str[(i + j)]);

and replace the println() with whatever code you want and i+j will always be the row and column location as long as your rows variable is how many rows you are working with.

于 2013-03-30T19:38:20.720 回答