【问题标题】:How can I express my for loop with a foreach loop on my 2D array?如何用二维数组上的 foreach 循环来表达我的 for 循环?
【发布时间】:2018-05-13 13:30:17
【问题描述】:
public static boolean doit(int[][] a, int b){
    for(int i=0; i<a.length; i++){
        for (int j = 0; j < a[i].length; j++)
        {
            if(a[i][j] ==b) {
                return true;
            }
        }
    }
    return false;
}

所以基本上我想使用ForEach 循环来检查数组是否包含int b,但我不确定如何使用它。

public static boolean doitTwo(int[][] a, int b){
    for(c :a){
        for ( d:a){
              if(a[c][d] ==b) {
                return true;
            }
        }
    }

}

【问题讨论】:

    标签: java multidimensional-array foreach


    【解决方案1】:

    差不多了,但是当内部循环应该使用c 时,您在两个循环中都在迭代a。此外,当您迭代值而不是像这样的索引时,您不需要对数组进行索引(就像您对 a[c][d] 所做的那样),因为您已经有了这些值。

    public static boolean doitTwo(int[][] a, int b){
        for(int[] c : a){
            for (int d : c){
                  if(d ==b) {
                    return true;
                }
    
        }
    
    }
    

    我还在你的 for 循环中添加了类型,这不是绝对必要的,因为它们可以被推断出来,但我更喜欢在 Java 中显式。

    第一个 for 循环 c : a 接受 a 并迭代其值。因为它是一个二维数组,所以它的每个元素都是一个一维数组!然后遍历该一维数组,一维数组的每个值都是 int。

    示例伪代码:

    # Original 2D array which is an array, containing arrays of ints. i.e. int[][]
    x = [[1, 2, 3], [4, 5, 6];
    
    for (a : x) {
      # at this point on the first iteration, a = [1,2,3]. i.e. int[]
      for (b : a) {
        # at this point on the first iteration, b = 1. i.e. int
      }
    }
    

    【讨论】:

    • 谢谢你,但你能解释一下为什么我必须使用第一个循环和数组而第二个没有?
    • @R.You 二维数组基本上是数组的数组,所以当迭代一个二维数组时,它的元素是一维数组。进入第二个循环后,您将遍历一维数组,因此您只剩下 int 值作为元素。
    • 我用更详尽的解释更新了答案。
    • 非常感谢,现在知道了。
    猜你喜欢
    • 2019-06-02
    • 2012-03-22
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多