【问题标题】:Getting the length of two-dimensional array获取二维数组的长度
【发布时间】:2011-11-14 02:20:20
【问题描述】:

如果我不知道数组的第二维,我如何获得它? array.length 仅给出第一个维度。

例如,在

public class B {
    public static void main(String [] main){
        int [] [] nir = new int [2] [3];
        System.out.println(nir.length);
    }
}

如何得到nir的第二维值,即3。

谢谢

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    哪个 3?

    您已经创建了一个多维数组。 nir 是一个 int 数组的数组;你有两个长度为 3 的数组。

    System.out.println(nir[0].length); 
    

    会给你你的第一个数组的长度。

    另外值得注意的是,您不必像以前那样初始化多维数组,这意味着所有数组不必具有相同的长度(或根本不存在)。

    int nir[][] = new int[5][];
    nir[0] = new int[5];
    nir[1] = new int[3];
    System.out.println(nir[0].length); // 5
    System.out.println(nir[1].length); // 3
    System.out.println(nir[2].length); // Null pointer exception
    

    【讨论】:

    • +1 特别是关于非矩形的危险建议(我的意思是对您的数据做出假设是危险的,而不是使用非矩形是危险的)。这愚弄了许多新手程序员,也愚弄了许多本应更了解的非新手程序员!
    • 所以基本上3 中的int [] [] nir = new int [2] [3]; 是虚拟的(没有实际用途)。正确的???还是用于在每行中分配 3 个单元格 - 默认没有。每行的列数??
    • @KNU 如果您使用将第二维明确定义为 3 的语法......那么您将获得每个数组的长度。我回答的第二部分只是指出您不必使用该语法。
    【解决方案2】:
    int secondDimensionSize = nir[0].length;
    

    第一个维度的每个元素实际上是另一个具有第二个维度长度的数组。

    【讨论】:

      【解决方案3】:

      你可以这样做:

       System.out.println(nir[0].length);
      

      但请注意,Java 中没有真正的二维数组。每个“第一级”数组包含另一个数组。这些数组中的每一个都可以具有不同的大小。 nir[0].length 的大小不一定与 nir[1].length 相同。

      【讨论】:

        【解决方案4】:
        nir[0].length
        

        注意 0:您的数组中必须至少有一个数组。
        注 1:并非所有子数组的长度都不必相同。

        【讨论】:

          【解决方案5】:

          假设第二维中每个数组的长度相同,可以使用

          public class B {    
           public static void main(String [] main){
              int [] [] nir= new int [2] [3];
              System.out.println(nir[0].length);
           }
          }
          

          【讨论】:

            【解决方案6】:

            使用

               System.out.print( nir[0].length);
            

            看看这个打印二维数组内容的for循环 第二个循环遍历每一行中的列

            for(int row =0 ; row < ntr.length; ++row)
             for(int column =0; column<ntr[row].length;++column)
                System.out.print(ntr[row][column]);
            

            【讨论】:

            • 注意,如果没有创建第二维数组,这会抛出空指针异常;打印前应检查ntr[row] != null
            【解决方案7】:

            请记住,2D array 不是真正意义上的2D array。数组的每个元素本身就是一个数组,不一定具有相同的大小。 所以,nir[0].length 可能等于也可能不等于 nir[1].length nir[2]length

            希望有帮助..:)

            【讨论】:

              【解决方案8】:

              多维数组总长度的扩展,

              通常对于您的情况,因为二维数组的形状是“平方的”。

              int length = nir.length * nir[0].length;
              

              但是,对于二维数组,每一行的元素数量可能不完全相同。 因此我们需要遍历每一行,将元素个数加起来。

              int length = 0;
              for ( int lvl = 0; lvl < _levels.length; lvl++ )
              {
                  length += _levels[ lvl ].length;
              }
              

              如果是 N-D 数组,这意味着我们需要 N-1 个 for 循环来获取每一行的大小。

              【讨论】:

                【解决方案9】:

                下面是一个完整的解决方案,如何枚举锯齿形二维数组(3行3到5列)中的元素:

                    String row = "";
                    int[][] myArray = {{11, 12, 13}, {14, 15, 16, 17}, {18, 19, 20, 21, 22}};
                    for (int i=0; i<myArray.length; i++) {
                        row+="\n";
                        for (int j = 0; j<myArray[i].length; j++) {
                            row += myArray[i][j] + "  ";
                        }
                    }
                    JOptionPane.showMessageDialog(null, "myArray contains:" + row);
                

                【讨论】:

                  【解决方案10】:

                  在最新版本的 JAVA 中,您可以这样做:

                  nir.length //is the first dimension
                  nir[0].length //is the second dimension
                  

                  【讨论】:

                    【解决方案11】:
                    //initializing few values
                    int[][] tab = new int[][]{
                        {1,0,1,0,1,0,1,0},
                        {0,1,0,1,0,1,0,1},
                        {1,0,1,0,1,0,1,0},
                        {0,1,0,1,0,1,0,1},
                        {1,0,1,0,1,0,1,0},
                        {0,1,0,1,0,1,0,1},
                        {1,0,1,0,1,0,1,0},
                        {0,1,0,1,0,1,0,1}
                    };
                    
                    //tab.length in first loop
                    for (int row = 0; row < tab.length; row++)
                    {
                        //tab[0].length in second loop
                        for (int column = 0; column < tab[0].length; column++)
                        {
                            //printing one value from array with space
                            System.out.print(tab[row][column]+ "   ");
                        }
                        System.out.println(); // new row = new enter
                    }
                    

                    【讨论】:

                    • 您可能需要具体说明如何获得内部数组的长度。而且,在一般情况下,建议计算当前行的长度column &lt; tab[row].length,因为Java中多维数组是锯齿状的,每行的长度可能会有所不同。
                    猜你喜欢
                    • 2012-07-30
                    • 1970-01-01
                    • 2011-04-29
                    • 2018-04-19
                    • 1970-01-01
                    • 2021-03-02
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多