Java 如果数组仅为1D并使用for循环,如何获取行和列

Java 如果数组仅为1D并使用for循环,如何获取行和列,java,arrays,for-loop,Java,Arrays,For Loop,我习惯了Matlab的特性,在这里你可以制作一个矩阵,得到[I][j],诸如此类的东西。现在我使用Java,我们只能使用一维数组。我想使用嵌套的for循环修改条目(I:for rows和j:for columns),但如果它们存储在1D数组中,我不确定如何访问它们。有人能帮我吗?有多困难?请注意,在Java中,您也可以使用如下2D数组: int[][] my2DArr = new int[4][3]; //creates a 2D array with 4 rows and 3 columns

我习惯了Matlab的特性,在这里你可以制作一个矩阵,得到[I][j],诸如此类的东西。现在我使用Java,我们只能使用一维数组。我想使用嵌套的for循环修改条目(I:for rows和j:for columns),但如果它们存储在1D数组中,我不确定如何访问它们。有人能帮我吗?有多困难?

请注意,在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
现在,如果你必须使用一个一维数组来表示一个二维数组,你可以做一些简单的数学运算来找出给定行的位置,如果你知道列数和行数的话,列对。请看这里:

int rows=3;
int cols=4;
int[]数组=新的int[rows*cols];
int[]currentRow=新的int[cols];
对于(int i=0;i
我希望我能正确理解这一点

假设您有一个10x10 2D阵列,并且希望它是一维的

可以使数组[0]到数组[9]成为二维数组的第一行。然后,数组[10]到数组[19]是2D数组的第二行


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

计算机跟踪的所有阵列都是1D的,因为它们存储在顺序存储器中(C编程:一种现代方法-K.N.King)。因此,如果您想像使用2D数组一样使用一维数组,只需执行以下操作:(使用字符串数组的示例)

private int getElem(int[] arr, int i, int j){
  return arr[i*colNum+j];
}
这就像:

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)]);
int行=2;
int cols=(str.length/行);
对于(int i=0;i

并将
println()
替换为所需的任何代码,只要rows变量是正在处理的行数,i+j将始终是行和列位置。

为什么只能使用1D数组?是的,仅使用双[]数组;不幸的是,没有双[][]数组。在Java中,多维数组是数组的数组。这是一个家庭作业问题,还是你不能使用二维数组的其他原因?是的,这是hmw问题,问题是用Java手动裁剪图像,但我甚至不知道如何从一维数组访问I和j…它工作得很好,谢谢你和其他人。谁能告诉我我的问题a-1是什么?我想避免这样的事情,所以我想知道我做错了什么……这种逻辑让我的一天成为“数组[I*cols+j]”。以前,我需要使用一个变量来存储'columnCount++',使用'if else'来检查columnCount是否小于输入数组长度。感谢@RobGIt值得注意的是,这比使用1D阵列效率低。
String str[][] = {{"a", "b", "c"}, {"d", "e", "f"}};
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)]);