我已经习惯了Matlab
可以制作矩阵并获取A[i][j]
诸如此类的东西的功能。现在我正在使用 Java,我们只能使用一维数组。我想使用嵌套的 for 循环修改条目(i:for 行和 j:for 列),但如果它们存储在一维数组中,我不确定如何访问它们。有人可以帮我吗?有多难?
5 回答
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];
}
}
private int getElem(int[] arr, int i, int j){
return arr[i*colNum+j];
}
请注意,在 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 数组
我希望我能正确理解这一点。
假设您有一个 10x10 二维数组,并且您希望它是一维的。
您可以使 array[0] 到 array[9] 成为二维数组的第一行。那么array[10]到array[19]就是二维数组的第二行。
可能有一种更有效的方法来做到这一点。
计算机跟踪的所有数组都是一维的,因为它们存储在其中的顺序内存位置(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.