繁体   English   中英

Java:声明一个多维数组而不指定数组的大小(例如 new int[10][] )

[英]Java: Declaring a multidimensional array without specifying the size of the array ( eg. new int[10][] )

我一直试图弄清楚这里到底发生了什么。 我只是想弄清楚我在下面评论的 2 行在做什么。 我发现这个程序没有声明数组的完整维度(而不是 new int[10][5];它只是决定不通过说“new int[10][];”来声明它,就像第二个数组长度无关紧要(将其更改为 1 或 100 不会影响输出)。

int[][] tri = new int[10][];  //this lack of giving the size of the 2nd array is strange
 for (int r=0; r<tri.length; r++) {
 tri[r] = new int[r+1];   //I'm not sure what this line is doing really 
}
for (int r=0; r<tri.length; r++) {
 for (int a=0; a<tri[r].length; a++) {
     System.out.print(tri[r][a]);  
     }
 System.out.println();
 }

第一行构成一个 int 数组。 创建的 int 数组有 10 个插槽。

第三行创建一个新的 int 数组并将其放入您最初创建的插槽之一中。 新的 int 数组中有 r+1 个整数空间。

因此,位置 0 的 int 数组将有 1 个用于 int 的槽。 位置 1 的 int 数组将有 2 个用于 int 的插槽。 整体形状将是:

[
    [0],
    [0,0],
    [0,0,0],
    ...,
    [0,0,0,0,0,0,0,0,0,0]
]

用变量名 tri 暗示(它看起来像一个三角形)

所有new int[10][]声明是一个大小为 10 的数组,包含null数组。

for循环中, null数组被实例化为不断增加的数组大小。

如果您将多维数组视为数组数组,则更有意义:

int [][] tri = new int[10][]; // This is an array of 10 arrays

tri[r] = new int[r+1]; // This is setting the r'th array to
                       // a new array of r+1 ints

它只是声明了一个包含 10 个数组的数组。 每个“子”数组的长度都可以不同。

在 Java 中最好使用多维集合。

句法:

ArrayList <Object> x= new ArrayList <Object>();

下面是多维集合在Java中的应用。


import java.util.*; 

class MultidimensionalArrayList { 

    /*function for creating and returning 2D ArrayList*/
    static List create2DArrayList() 
    { 
        /*Declaring 2D ArrayList*/
        ArrayList<ArrayList<Integer> > x 
            = new ArrayList<ArrayList<Integer> >(); 

        /*one space allocated for 0th row*/
        x.add(new ArrayList<Integer>()); 

        /*Adding 3 to 0th row created above x(0, 0)*/
        x.get(0).add(0, 3); 

        /*Creating 1st row and adding values 
    (another way for adding values in 2D collections)*/
        x.add(new ArrayList<Integer>(Arrays.asList(3, 4, 6))); 

        /*Add 366 to 1st row 0th column x(1, 0)*/
        x.get(1).add(0, 366); 

        /*Add 576 to 1st row 4th column x(1, 4)*/
        x.get(1).add(4, 576); 

        /*Adding values to 2nd row*/
        x.add(2, new ArrayList<>(Arrays.asList(3, 84))); 

        /*Adding values to 3rd row*/
        x.add(new ArrayList<Integer>(Arrays.asList(83, 6684, 776))); 

        /*Adding values to 4th row*/
        x.add(new ArrayList<>(Arrays.asList(8))); 

        return x; 
    } 

    public static void main(String args[]) 
    { 
        System.out.println("2D ArrayList :"); 

        /*Printing 2D ArrayList*/
        System.out.println(create2DArrayList()); 
    } 
} 


不缺,基本上没有设置具体的数量,不是必须的,因为它可以有很多字段

和第二行

tri[r] = new int[r+1];

正在将所有字段设置为非空

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM