【问题标题】:Getting exception when using foreach but regular for loop executes well使用 foreach 时出现异常,但常规 for 循环执行良好
【发布时间】:2020-11-15 05:44:07
【问题描述】:

使用常规的 foloop,得到正确的输出,使用 for each loop 抛出 ArrayOutOfBound 异常。谁能解释一下?

public class FindTheDiff {
public static void main(String args[]){
    System.out.println(isAnagramRecursion("all","laa"));
}

private static boolean isAnagramRecursion(String param1, String param2) {
    int[] arr = new int[122];
    char[] param1Lower = param1.toLowerCase().toCharArray();
    char[] param2Low2 = param2.toLowerCase().toCharArray();

    for (char ch1 : param1Lower) {
        arr[ch1] = arr[ch1]+1;
    }

    for (char ch2 : param2Low2){
        arr[ch2] = arr[ch2]-1;
    }

    for (int i :arr) {
        if(arr[i] != 0)
            return false;
    }
    /*for (int i = 0; i < arr.length; i++) {
        if(arr[i] != 0)
            return false;
    }*/
    return true;
}

}

【问题讨论】:

    标签: java for-loop exception foreach


    【解决方案1】:

    这里i 不是数组的索引,而是数组的。但在常规循环中i 是索引。

    for (int i :arr) {
        if(arr[i] != 0)
           return false;
    }
    

    在if条件下使用数组的值表示i

    for (int i :arr) {
        if(i != 0)
            return false;
    }
    

    【讨论】:

      【解决方案2】:

      这是错误的循环。在执行 forEach 循环时,您迭代的是值,而不是索引。在您的情况下,正确的 forEach 循环应该是:

      for (int arrValue :arr) {
          if(arrValue != 0)
              return false;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多