在包含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); } }
如果您需要在循环中使用索引访问某些内容,请使用for,而不是foreach(已增强)。
现在,您将nested使用itype 变量访问数组char。该变量i表示nested要迭代的数组元素。因此,如果使用此变量访问数组,则其值将隐式转换为其int表示形式(例如'a' == 97),这将导致异常。
nested
i
char
'a' == 97
在您的情况下,您需要for循环,或者将当前索引值保留在其他变量中,并在每次迭代时将其递增,因为您无法使用以下增强功能来执行这种索引运算: nested[i + 1]
nested[i + 1]