460

考虑:

int[][] multD = new int[5][];
multD[0] = new int[10];

这就是你创建一个 5 行 10 列的二维数组的方式吗?

我在网上看到了这段代码,但语法没有意义。

4

13 回答 13

858

尝试以下操作:

int[][] multi = new int[5][10];

...这是这样的简写:

int[][] multi = new int[5][];
multi[0] = new int[10];
multi[1] = new int[10];
multi[2] = new int[10];
multi[3] = new int[10];
multi[4] = new int[10];

请注意,每个元素都将被初始化为 , 的默认值int0因此上面也等价于:

int[][] multi = new int[][]{
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
于 2012-09-01T21:15:28.990 回答
82

我们可以声明一个二维数组,并在声明时直接存储元素为:

int marks[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};

这里int表示存储在数组中的整数类型元素,数组名称为 'marks'。int是“{”和“}”大括号内表示的所有元素的数据类型,因为数组是具有相同数据类型的元素的集合。

回到我们上面写的语句:每一行元素都应该写在花括号内。行和每行中的元素应以逗号分隔。

现在观察语句:可以得到 3 行 5 列,因此 JVM 创建 3 * 5 = 15 块内存。这些块可以单独称为:

marks[0][0]  marks[0][1]  marks[0][2]  marks[0][3]  marks[0][4]
marks[1][0]  marks[1][1]  marks[1][2]  marks[1][3]  marks[1][4]
marks[2][0]  marks[2][1]  marks[2][2]  marks[2][3]  marks[2][4]


注意:
如果要存储n 个元素,则数组索引从零开始,到n-1结束。创建二维数组的另一种方法是先声明数组,然后使用 new 运算符为其分配内存。

int marks[][];           // declare marks array
marks = new int[3][5];   // allocate memory for storing 15 elements

结合以上两者,我们可以写出:

int marks[][] = new int[3][5];
于 2013-08-05T07:07:13.723 回答
53

您可以按照其他人提到的方式创建它们。还有一点要补充:您甚至可以为每一行创建一个倾斜的二维数组,不一定具有相同数量的列,如下所示:

int array[][] = new int[3][];
array[0] = new int[3];
array[1] = new int[2];
array[2] = new int[5];
于 2012-09-01T21:23:58.527 回答
30

创建510列的二维数组的最常见习惯用法是:

int[][] multD = new int[5][10];

或者,您可以使用以下内容,这与您所拥有的更相似,但您需要显式初始化每一行:

int[][] multD = new int[5][];
for (int i = 0; i < 5; i++) {
  multD[i] = new int[10];
}
于 2012-09-01T21:14:43.833 回答
12

也可以通过以下方式声明它。这不是好的设计,但它确实有效。

int[] twoDimIntArray[] = new int[5][10];
于 2015-01-23T09:04:10.663 回答
9

尝试:

int[][] multD = new int[5][10];

请注意,在您的代码中,只有 2D 数组的第一行被初始化为 0。第 2 到 5 行甚至不存在。如果您尝试打印它们,您将得到null每个人的。

于 2012-09-01T21:15:12.440 回答
8
int [][] twoDim = new int [5][5];

int a = (twoDim.length);//5
int b = (twoDim[0].length);//5

for(int i = 0; i < a; i++){ // 1 2 3 4 5
    for(int j = 0; j <b; j++) { // 1 2 3 4 5
        int x = (i+1)*(j+1);
        twoDim[i][j] = x;
        if (x<10) {
            System.out.print(" " + x + " ");
        } else {
            System.out.print(x + " ");
        }
    }//end of for J
    System.out.println();
}//end of for i
于 2014-11-21T12:25:21.640 回答
8

在 Java 中,可以将二维数组声明为与一维数组相同。在一个一维数组中,你可以这样写

  int array[] = new int[5];

其中 int 是一种数据类型,array[] 是一个数组声明,并且new array是一个包含五个索引的对象的数组。

像这样,您可以编写一个二维数组,如下所示。

  int array[][];
  array = new int[3][4];

array是一个 int 数据类型。我首先声明了该类型的一维数组,然后创建了一个 3 行 4 列数组。

在您的代码中

int[][] multD = new int[5][];
multD[0] = new int[10];

表示您创建了一个二维数组,有五行。第一行有 10 列。在 Java 中,您可以根据需要为每一行选择列大小。

于 2014-06-24T16:23:32.180 回答
7
int rows = 5;
int cols = 10;

int[] multD = new int[rows * cols];

for (int r = 0; r < rows; r++)
{
  for (int c = 0; c < cols; c++)
  {
     int index = r * cols + c;
     multD[index] = index * 2;
  }
}

享受!

于 2014-06-23T11:28:41.877 回答
4

试试这个方法:

int a[][] = {{1,2}, {3,4}};

int b[] = {1, 2, 3, 4};
于 2015-09-30T06:13:11.450 回答
3

这些类型的数组在 Java 中称为锯齿状数组:

int[][] multD = new int[3][];
multD[0] = new int[3];
multD[1] = new int[2];
multD[2] = new int[5];

在这种情况下,数组的每一行都包含不同数量的列。在上面的示例中,第一行将包含三列,第二行将包含两列,第三行将包含五列。您可以在编译时初始化此数组,如下所示:

 int[][] multD = {{2, 4, 1}, {6, 8}, {7, 3, 6, 5, 1}};

您可以轻松地迭代数组中的所有元素:

for (int i = 0; i<multD.length; i++) {
    for (int j = 0; j<multD[i].length; j++) {
        System.out.print(multD[i][j] + "\t");
    }
    System.out.println();
}
于 2017-07-13T09:19:01.247 回答
2

实际上Java没有数学意义上的多维数组。Java 所拥有的只是数组数组,一个数组,其中每个元素也是一个数组。这就是为什么初始化它的绝对要求是第一维的大小。如果指定了其余部分,则它将创建一个填充有默认值的数组。

int[][]   ar  = new int[2][];
int[][][] ar  = new int[2][][];
int[][]   ar  = new int[2][2]; // 2x2 array with zeros

它也给了我们一个怪癖。子数组的大小不能通过添加更多元素来改变,但我们可以通过分配一个任意大小的新数组来做到这一点。

int[][]   ar  = new int[2][2];
ar[1][3] = 10; // index out of bound
ar[1]    = new int[] {1,2,3,4,5,6}; // works
于 2020-04-01T10:31:15.797 回答
0

如果你想要动态和灵活的东西(即你可以添加或删除列和行的地方),你可以尝试“ArrayList of ArrayList”:

public static void main(String[] args) {

    ArrayList<ArrayList<String>> arrayListOfArrayList = new ArrayList<>();

    arrayListOfArrayList.add(new ArrayList<>(List.of("First", "Second", "Third")));
    arrayListOfArrayList.add(new ArrayList<>(List.of("Fourth", "Fifth", "Sixth")));
    arrayListOfArrayList.add(new ArrayList<>(List.of("Seventh", "Eighth", "Ninth")));
    arrayListOfArrayList.add(new ArrayList<>(List.of("Tenth", "Eleventh", "Twelfth")));

    displayArrayOfArray(arrayListOfArrayList);
    addNewColumn(arrayListOfArrayList);
    displayArrayOfArray(arrayListOfArrayList);
    arrayListOfArrayList.remove(2);
    displayArrayOfArray(arrayListOfArrayList);
}

private static void displayArrayOfArray(ArrayList<ArrayList<String>> arrayListOfArrayList) {
    for (int row = 0; row < arrayListOfArrayList.size(); row++) {
        for (int col = 0; col < arrayListOfArrayList.get(row).size(); col++) {
            System.out.printf("%-10s", arrayListOfArrayList.get(row).get(col));
        }
        System.out.println("");
    }
    System.out.println("");
}

private static void addNewColumn(ArrayList<ArrayList<String>> arrayListOfArrayList) {
    for (int row = 0; row < arrayListOfArrayList.size(); row++) {
        arrayListOfArrayList.get(row).add("added" + row);
    }
}

输出:

First     Second    Third     
Fourth    Fifth     Sixth     
Seventh   Eighth    Ninth     
Tenth     Eleventh  Twelfth   

First     Second    Third     added0    
Fourth    Fifth     Sixth     added1    
Seventh   Eighth    Ninth     added2    
Tenth     Eleventh  Twelfth   added3    

First     Second    Third     added0    
Fourth    Fifth     Sixth     added1    
Tenth     Eleventh  Twelfth   added3    
于 2022-02-17T22:02:51.740 回答