Java 为什么试图通过将计数器设置为条件来中断2 for循环会导致错误
所以我注意到运行此代码将导致Java 为什么试图通过将计数器设置为条件来中断2 for循环会导致错误,java,Java,所以我注意到运行此代码将导致IndexOutOfBounds错误。因此,我有一个条件,如果条件为真,我需要中断,但通过设置计数器中断不起作用。为什么它不起作用?我应该做些什么来打破2个for循环 方法getRequirements()只返回一个[7][24]的2D数组 for (int i = 0; i < s.getRequirements().length; i++) { for (int j = 0; j < s.getRequirements()[i]
IndexOutOfBounds
错误。因此,我有一个条件,如果条件为真,我需要中断
,但通过设置计数器中断不起作用。为什么它不起作用?我应该做些什么来打破2个for
循环
方法getRequirements()
只返回一个[7][24]的2D数组
for (int i = 0; i < s.getRequirements().length; i++) {
for (int j = 0; j < s.getRequirements()[i].length; j++) {
if (j == 3) {
j = s.getRequirements()[i].length;
i = s.getRequirements().length;
}
}
}
for(int i=0;i
^它保证触发IndexOutOfBounds
,因为您在内部循环(ogj
)中分配了i
变量,该变量不会检查作为其终端条件的i
。为什么在第5行中再次设置“i”
如果要断开循环的父循环,只需将其标记为outer:
并使用breakouter代码>。
如果不这样做,“i”将根据需求的长度进行更新,但“j”循环仍将进行处理,从而在使用i的下一个get上导致错误。这导致错误的原因是循环按从最内层到最外层的顺序断开,因此条件j
使用越界值i
进行检查,而不是由于未通过外部循环的边界检查而被跳过
一般来说,打破多个嵌套循环的最佳方法通常是一个循环。在您的代码中,这将如下所示:
outerLoop:
for (int i = 0; i < s.getRequirements().length; i++) {
for (int j = 0; j < s.getRequirements()[i].length; j++) {
if (j == 3) {
break outerLoop;
}
}
}
outerLoop:
对于(int i=0;i
仅当循环后的代码关心循环索引变量时,才需要设置循环索引变量。此异常的直接原因是内部循环条件取决于i
,它被故意更改为超出最终元素
j < s.getRequirements()[i].length
^ length of the i-th requirement
j < s.getRequirements()[i].length
^ length of the i-th requirement
int n = s.getRequirements()[i].length;
for (int j = 0; j < n; j++) {
if (...) {
j = n;
i = s.getRequirements().length;
}
}