【问题标题】:Multidimensional array usage in JavaJava中的多维数组使用
【发布时间】:2013-02-16 13:02:43
【问题描述】:

谁能解释一下下面代码中的以下语句是什么意思..??

for (j = 0; j < arrayOfInts[i].length; j++)

我正在学习 Java 语言,但很难搞清楚..

class BreakWithLabelDemo {
        public static void main(String[] args) {

            int[][] arrayOfInts = { 
                { 32, 87, 3, 589 },
                { 12, 1076, 2000, 8 },
                { 622, 127, 77, 955 }
            };
            int searchfor = 12;

            int i;
            int j = 0;
            boolean foundIt = false;

        search:
            for (i = 0; i < arrayOfInts.length; i++) {
                for (j = 0; j < arrayOfInts[i].length;
                     j++) {
                    if (arrayOfInts[i][j] == searchfor) {
                        foundIt = true;
                        break search;
                    }
                }
            }

            if (foundIt) {
                System.out.println("Found " + searchfor + " at " + i + ", " + j);
            } else {
                System.out.println(searchfor + " not in the array");
            }
        }
    }

【问题讨论】:

    标签: java multidimensional-array


    【解决方案1】:

    Java 并没有真正的多维数组,它有可以包含其他数组的数组。该代码从误导性命名的arrayOfInts 中获取ith 项。这个项目本身就是一个整数数组,所以它采用了这个数组的length。 (它存储在另一个数组中。)因此,例如在此代码中:

    int[][] array2d = new int[][] {
        new int[] {1},      // stored at array2d[0]
        new int[] {2, 3, 4} // stored at array2d[1]
    }
    

    以下是正确的:

    • array2d.length == 2(“多维”数组包含另外两个数组。)
    • array2d[0].length == 1(第一个有一个元素:1。)
    • array2d[1].length == 3(第二个有三个元素:234。)

    【讨论】:

      【解决方案2】:

      Java 中没有多维数组。所有的都是数组的数组。

      arrayOfInts 就是这样一个整数数组。所以arrayOfInts[i] 是一个整数数组,而

      for (j = 0; j < arrayOfInts[i].length; j++)
      

      迭代此数组的每个元素,即迭代存储在整数数组的索引i 处的整数数组中的所有元素。

      你可以把它看成一个包含 N 个小盒子的大盒子,每个小盒子包含给定数量的整数。 arrayOfInt 是大盒子。 arrayOfInt[i] 是大盒子中的 ith 小盒子。并且循环遍历这个小盒子中的每个整数。

      【讨论】:

      • There is no multidimensional array in Java。用什么语言有multidimensional数组,只有array of arrays。但是,它被称为multidimensional数组。multidimensional arraysand array of arrays没有区别。
      • Pascal 具有多维数组,例如 C#。我敢肯定其他语言也有它们。主要区别在于多维数组中的所有行都具有相同的长度,而数组数组中的情况并非如此。另一种是多维数组中的一行不能为空,而数组的数组中可以是行。
      • Multidimensional arrayarray of arrays 相同。在具有 2 个数组的 2d 数组中,如果所有 1d 数组的长度相同,尽管它将被称为array of arrays
        否则即使一个一维数组有不同的编号。元素比另一个,它也是array of arrays,但它是jagged
      【解决方案3】:

      在Java中二维数组的实现是一维数组的一维数组。

      for (j = 0; j < arrayOfInts[i].length; j++)
      

      arrayOfInts[i].length 表示 arrayOfInts 的第 i 行的长度。

      int[][] a = new int[2][4]; 
      

      这个二维数组将有两行四列。这实际上分配了 3 个对象:一个包含 2 个元素的一维数组来保存每个实际的行数组,以及两个包含 4 个元素的一维数组来表示行的内容。

       +-----+    +-----+-----+-----+-----+
       |a[0] | -> | [0] | [1] | [2] | [3] |
       |     |    +-----+-----+-----+-----+    In Java two-dimensional arrays are implemented is a  
                                              one-dimensional array of one-dimensional arrays -- like this.
       +-----+
       |     |    +-----+-----+-----+-----+
       |a[1] | -> | [0] | [1] | [2] | [3] |
       +-----+    +-----+-----+-----+-----+
      

      【讨论】:

        【解决方案4】:

        j = 0; j

        因为你的数组是二维的,数组的内部元素将是数组。

        所以你得到元素(即数组)arrayOfInts[i]并计算长度arrayOfInts[i].length,换句话说:

        int[] 元素 = arrayOfInts[i]; int 长度 = arrayOfInts[i].length;

        【讨论】:

          【解决方案5】:

          将 arrayOfInts[i][j] 视为一个二维网格,就像一个电子表格。为了帮助可视化,假设 [j] 表示列索引,[i] 表示行索引。

          那么解释是:

          // iterate through every column j in the current row i:
          for (j = 0; j < arrayOfInts[i].length; j++)
          

          【讨论】:

            【解决方案6】:

            在您的代码中,请参见 int [][]arrayOfInts=...
            它是一个二维数组。
            二维数组不过是arrays of arrays
            这意味着将有许多普通的一维数组,另一个数组具有每个一维数组的引用。
            因此,for(j=0;j&lt;arrayOfInts[i].length;j++) 行的解释如下:
            首先,让我们把重点放在单词arrayOfInts[i].length
            我已经告诉过你arrayOfInts 是一个数组数组。所以,arrayOfInts[i] 指向ith 数组。单词arrayOfInts[i].length 返回arrayOfIntsith 数组中的长度(即数组中的元素数)。
            循环继续发生,直到j 小于一维数组中的元素数(小于(不要使用等于),因为 arrayOfInts[i][0] 将是第一个元素)。

            【讨论】:

              猜你喜欢
              • 2011-10-30
              • 2016-06-22
              • 1970-01-01
              • 1970-01-01
              • 2018-10-17
              • 1970-01-01
              • 2016-09-07
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多