【问题标题】:How to calculate dimensions of a 2d array?如何计算二维数组的维度?
【发布时间】:2018-05-20 17:36:18
【问题描述】:

我正在寻找二维数组的维度。不是分配给数组的固定值,而是包含整数的值。示例:

int a[][] = new int[4][5];
a[1][1] = 1;
a[1][2] = 2;
a[1][3] = -2;
a[1][4] = 0;
a[2][1] = -3;
a[2][2] = 4;
a[2][3] = 7;
a[2][4] = 2;
a[3][1] = 6;
a[3][2] = 0;
a[3][3] = 3;
a[3][4] = 1;

4 个变量中仅使用了 3 个变量,5 个变量中使用了 4 个变量。您如何区分实际存在的变量和分配的变量?

array.length;
array[0].length;

前面的代码只会给你分配给数组的固定变量。但是,如果您不使用所有变量怎么办?换句话说,我正在寻找列的输出为 3,行的输出为 4。

【问题讨论】:

  • 你不能。数组填充有默认值,例如 0 false null(取决于类型)。由于您使用0 作为正确的值,因此您无法知道其余的零是默认值(未使用)还是由其他人实际设置的。

标签: java arrays multidimensional-array dimensions


【解决方案1】:

在您的代码示例中,您使用数组中的所有变量。只是因为你没有给他们分配任何东西,他们仍然坐在那里。

如果要确定是否为数组中的每个元素分配了值,则需要将所有内容初始化为默认值,然后与默认值进行比较。

该选项的一个变体是将它们声明为int?,这是一个可以为空的int。这将允许您将所有内容设置为null,然后您将知道不再为null 的元素已被分配了一个值。

【讨论】:

    【解决方案2】:

    你不能动态地做到这一点。一旦你像这样 (new int[4][5]) 启动了你的矩阵,你就有了 0 的矩阵。

    您必须启动矩阵 ant 为所有位置设置一个无效值,例如 -1 或任何您不想要的值并对其进行迭代以发现结果

    【讨论】:

      【解决方案3】:
          // using Integer instead of int, which is a nullable object
          Integer a[][] =  new Integer[4][5];
          int cnt1 = 0;
          for(int i = 0; i < a.length; i++) {
              for(int j = 0; j < a[i].length; j++) {
                  if(a[i][j] != null) {
                      cnt1++;
                  }
              }
          }
          System.out.println(cnt1 + " array indices are non-null.");
      
          // using int
          int b[][] =  new int[4][5];
          for(int i = 0; i < b.length; i++) {
              for(int j = 0; j < b[i].length; j++) {
                  b[i][j] = -9999;
              }
          }
      
          int cnt2 = 0;
          for(int i = 0; i < b.length; i++) {
              for(int j = 0; j < b[i].length; j++) {
                  // pick a value that will never be assigned
                  if(b[i][j] != -9999) {
                      cnt2++;
                  }
              }
          }
          System.out.println(cnt2 + " array indices are not -9999.");
      

      【讨论】:

      • 包含a[i][j] = null; 的第一个循环是多余的。 Integer a[][] = new Integer[4][5]; 已被nulls 填充。
      • 哦,是的。甚至更好。我会更新的,没关系。
      猜你喜欢
      • 1970-01-01
      • 2013-03-27
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多