【问题标题】:for each loop inside foreach loop?foreach 循环中的每个循环?
【发布时间】:2012-11-01 10:07:18
【问题描述】:

这会产生错误。还有其他方法可以从多维数组中一一提取元素吗?

我认为对于 foreach 循环(变量持有相应的值:array/Iterable),可以首先从 multiD 中获取一维数组。数组,然后创建另一个从该数组中提取元素的 foreach 循环。但它在 foreach 循环中给出了各种错误。

第一个错误:Array2D.java:14:错误:不是语句 for(a : arr[] )

代码背后:

class Array2D {
    public static void main(String[] args) {
        int[][] array = new int[][]
        {
                { 1, 2, 3 },
                { 4, 5, 6 },
                { 7, 8, 9 }
        };

        int a[] = new int[3];

        for(a : array) {
            for(int n : a) {
                System.out.print(n + " ");
            }
        }
    }
}

【问题讨论】:

  • 请不要使用_2darray作为类名...首先阅读Java命名约定

标签: java arrays foreach


【解决方案1】:

您需要更改第一个for 语句。此外,您必须移动 int[] a 声明:

for(int[] a : arr) {
    ...
}

【讨论】:

  • for(变量持有对应值:array/Iterable)............持有值的变量不能是我们的吗?就像我们创建 int n=0 并只写 for(n : arr) ??
  • @rd4code:不,这不是 for-each 构造的合法语法。
【解决方案2】:

C# 支持以下数组:

  1. 一维数组
  2. 多维数组(也称为矩形数组)
  3. array-of-arrays(也称为锯齿状数组)。

例子:

int[] numbers; // Single-dimensional arrays // 1

string[,] names; // Multidimensional arrays // 2

int[][] detail;  // jagged arrays // 3

值得注意的是,在 C# 中,数组是对象,必须实例化。

因此,上述示例的实例化可能如下所示:

int[] numbers = new int[5];  // 1

string[,] names = new string[5,4]; // 2

int[][] detail = new int[7][];    // 3
for (int d = 0; d < detail.Length; d++)
{
  detail[d] = new int[10];
}

对于您的示例,可能会改写为以下方式:

static void Main(string[] args)
{
    int[][] arr = new int [][]
    {
        new int[] {1,2,3},
        new int[] {4,5,6},
        new int[] {7,8,9}
    };

    for (int i = 0; i < arr.Length; i++)
    {
        for (int j = 0; j < arr[i].Length; j++)
        {
            System.Console.Write(arr[i][j] + " ");
        }
        System.Console.WriteLine();
    }
}

使用 Java,我认为它看起来像

for(int[] arr : array)
{
    for(int n : arr)
    {
        System.out.print(n + " ");
    }
}

【讨论】:

    【解决方案3】:

    我会尝试:

    for (int r = 0; r < arr.length; r++) {
       for (int c = 0; c < arr[r].length; c++) {
          // c and r are the indexes into the array
       }
    }
    

    它通过遍历每个数组/数组行的长度为您提供数组元素的索引。

    或者如果你只需要没有索引的元素

       for (int[] a : arr) {
          for (int b : a) {
             // gives you the element in b
          }
       }
    

    【讨论】:

      【解决方案4】:

      在第一个 for put:

      for(a : arr) {
      //
      }
      

      【讨论】:

        猜你喜欢
        • 2021-05-28
        • 1970-01-01
        • 2018-09-15
        • 2011-10-22
        • 2013-10-01
        • 2016-09-26
        • 2012-07-19
        • 1970-01-01
        相关资源
        最近更新 更多