用于创建二维数组的语法

App*_*sei 424 java multidimensional-array

考虑:

int[][] multD = new int[5][];
multD[0] = new int[10];
Run Code Online (Sandbox Code Playgroud)

这是你如何创建一个包含5行和10列的二维数组?

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

old*_*inb 790

请尝试以下方法:

int[][] multi = new int[5][10];
Run Code Online (Sandbox Code Playgroud)

...这是这样的简写:

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];
Run Code Online (Sandbox Code Playgroud)

请注意,每个元素都将被初始化为默认值int,0,因此以上也等同于:

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 }
};
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,您可以在不同的行中使用不同的列.例如: - int [] [] multi = new int [5] []; multi [0] = new int [10]; multi [1] = new int [6]; multi [2] = new int [9]也完全有效 (26认同)
  • @Nawaz 有点晚了,但由于之前的回复是错误的,我想强调你*可以*写`... = { ... }`。例如 https://ideone.com/RjxQw7 (3认同)
  • 嗨Muneeb,如果我理解正确,您是在一个多维数组中询问每一行的列大小如何分配值。这是怎么做的:int [] [] multi = new int [] [] {{1,2,3},{1,2,3,4},{1}}; 并且您可以像这样访问/打印它们:for(int i = 0; i <multi.length; i ++){for(int j = 0; j <multi [i] .length; j ++){System.out.println( “ row:” + i +“ column:” + j +“ value:” + multi [i] [j]); }} (2认同)
  • 我们需要在 `=new int[][]{...}` 变体中使用 `new int[][]` 吗?我们可以直接写“={...}”吗? (2认同)
  • @Nawaz不,数组是java中的Object,只使用`new`关键字将内存分配给Objects. (2认同)
  • @roottraveller这是错误的,你可以[只写 `int[][] multi = { { ... }, ... };`](https://ideone.com/RjxQw7) 作为一个对象并不意味着编写 `new`是创建对象的唯一方法。`String s = "123";` 也不需要 `new` 关键字。 (2认同)

小智 75

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

int marks[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};
Run Code Online (Sandbox Code Playgroud)

这里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]
Run Code Online (Sandbox Code Playgroud)


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

int marks[][];           // declare marks array
marks = new int[3][5];   // allocate memory for storing 15 elements
Run Code Online (Sandbox Code Playgroud)

通过结合以上两点我们可以写:

int marks[][] = new int[3][5];
Run Code Online (Sandbox Code Playgroud)


Vic*_*jee 50

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

int array[][] = new int[3][];
array[0] = new int[3];
array[1] = new int[2];
array[2] = new int[5];
Run Code Online (Sandbox Code Playgroud)

  • 说得好!这是进行独立初始化的最重要方面. (5认同)
  • @Victor `int array[][] = new int[3][];` VS `int array[][] = new int[][3];` 怎么样?哪一个是合法的,因为我在某处读过这两个版本。 (2认同)

Joã*_*lva 30

创建具有5行和10列的二维数组的最常见习语是:

int[][] multD = new int[5][10];
Run Code Online (Sandbox Code Playgroud)

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

int[][] multD = new int[5][];
for (int i = 0; i < 5; i++) {
  multD[i] = new int[10];
}
Run Code Online (Sandbox Code Playgroud)

  • 还要意识到只有基元不需要初始化.如果将数组声明为`Object [] [] ary2d = new Object [5] [10];`那么你仍然必须初始化2D数组的每个元素. (3认同)
  • 除非你为任何非原语安全地处理`null`情况.是否应该初始化每个元素完全取决于您的设计.另外,只是为了澄清 - 如果没有为您分配原语,则原语不能为空并且实例化为定义的默认值.例如,`int`不能为null,当你说`int i;`而没有赋值时,使用默认值`0`.[在这里阅读](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html) (3认同)

cto*_*mek 11

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

int[] twoDimIntArray[] = new int[5][10];
Run Code Online (Sandbox Code Playgroud)


dce*_*chi 9

尝试:

int[][] multD = new int[5][10];
Run Code Online (Sandbox Code Playgroud)

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


小智 8

在Java中,二维数组可以声明为与一维数组相同.在一维数组中,你可以像写一样

  int array[] = new int[5];
Run Code Online (Sandbox Code Playgroud)

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

像这样,您可以编写如下的二维数组.

  int array[][];
  array = new int[3][4];
Run Code Online (Sandbox Code Playgroud)

array是一个int数据类型.我首先在这些类型的一维数组上声明,然后创建一个3行和4列数组.

在你的代码中

int[][] multD = new int[5][];
multD[0] = new int[10];
Run Code Online (Sandbox Code Playgroud)

意味着您已经创建了一个包含五行的二维数组.在第一行中有10列.在Java中,您可以根据需要为每行选择列大小.


小智 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
Run Code Online (Sandbox Code Playgroud)


小智 6

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

请享用!

  • C也支持多维数组. (3认同)