考虑:
int[][] multD = new int[5][];
multD[0] = new int[10];
这就是你创建一个 5 行 10 列的二维数组的方式吗?
我在网上看到了这段代码,但语法没有意义。
考虑:
int[][] multD = new int[5][];
multD[0] = new int[10];
这就是你创建一个 5 行 10 列的二维数组的方式吗?
我在网上看到了这段代码,但语法没有意义。
尝试以下操作:
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];
请注意,每个元素都将被初始化为 , 的默认值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 }
};
我们可以声明一个二维数组,并在声明时直接存储元素为:
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];
您可以按照其他人提到的方式创建它们。还有一点要补充:您甚至可以为每一行创建一个倾斜的二维数组,不一定具有相同数量的列,如下所示:
int array[][] = new int[3][];
array[0] = new int[3];
array[1] = new int[2];
array[2] = new int[5];
创建5行10列的二维数组的最常见习惯用法是:
int[][] multD = new int[5][10];
或者,您可以使用以下内容,这与您所拥有的更相似,但您需要显式初始化每一行:
int[][] multD = new int[5][];
for (int i = 0; i < 5; i++) {
multD[i] = new int[10];
}
也可以通过以下方式声明它。这不是好的设计,但它确实有效。
int[] twoDimIntArray[] = new int[5][10];
尝试:
int[][] multD = new int[5][10];
请注意,在您的代码中,只有 2D 数组的第一行被初始化为 0。第 2 到 5 行甚至不存在。如果您尝试打印它们,您将得到null
每个人的。
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
在 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 中,您可以根据需要为每一行选择列大小。
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;
}
}
享受!
试试这个方法:
int a[][] = {{1,2}, {3,4}};
int b[] = {1, 2, 3, 4};
这些类型的数组在 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();
}
实际上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
如果你想要动态和灵活的东西(即你可以添加或删除列和行的地方),你可以尝试“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