小编典典

For循环有效,但For Each无效。为什么?

java

在包含forEach循环的行上引发了出站异常,但是据我所知,此代码没有错。for循环从char数组的元素0开始,一直循环直到到达最后一个元素…但是当我尝试使用更长的for循环来执行此代码时,即

 for(int i = 0; i < nested.length; i++)

该代码按预期工作。

为什么在这种情况下for循环起作用,而forEach循环不起作用?

  public static void main(String[] args) {
      String S = "hello";
      String curly1 = "{";
      String box1 = "[";
      String p1 = "(";
      String curly2 = "}";
      String box2 = "]";
      String p2 = ")";
               char[] nested = S.toCharArray();
        int flag = 0;

        if(nested[0] != curly1.charAt(0)) flag = 0;
        if(nested[nested.length-1] != curly2.charAt(0)) flag = 0;

        for(char i : nested) {
            if(nested[i] == curly1.charAt(0) && nested[(i+1)] == box1.charAt(0) || nested[i] == box1.charAt(0) && nested[(i+1)] == p1.charAt(0)) {
                flag = 1; }
             else if(nested[i] == p2.charAt(0) && nested[(i+1)] == box2.charAt(0) || nested[i] == box2.charAt(0) && nested[(i+1)] == curly2.charAt(0)) {
                 flag = 1; }
                else { flag = 0;}
        }
        System.out.println(flag);

    }
}

阅读 267

收藏
2020-11-30

共1个答案

小编典典

如果您需要在循环中使用索引访问某些内容,请使用for,而不是foreach(已增强)。

现在,您将nested使用itype
变量访问数组char。该变量i表示nested要迭代的数组元素。因此,如果使用此变量访问数组,则其值将隐式转换为其int表示形式(例如'a' == 97),这将导致异常。

在您的情况下,您需要for循环,或者将当前索引值保留在其他变量中,并在每次迭代时将其递增,因为您无法使用以下增强功能来执行这种索引运算: nested[i + 1]

2020-11-30