Java循环不迭代

时间:2014-06-17 18:38:45

标签: java android loops for-loop

我从这段代码中得到一个IndexOutOfBounds错误:

Log.w("aa", "line size: " + line.getSize());
for ( a = line.getSize() - 1; a >= 0; a--);
   test(a, line);   
}

public void test(int a, LineCreator line){
   Log.w("AA", "a equals: " + a);
   int test = line.getSquare(a);
}
  

06-17 21:31:42.169 421-442 / com.Nuotta W / aa:行数:3

     

06-17 21:31:42.169 421-442 / com.Nuotta W / AA:等于:-1

它获得的线条大小为3.但它给出-1。

LineCreator是我的一个对象。它有非常简单的方法getSize只返回Array.length和getSquare(x)返回ArrayList.get(x)它们可以在其他地方工作但不在这里。

2 个答案:

答案 0 :(得分:2)

for ( a = line.getSize() - 1; a >= 0; a--);
    test(a, line);   
}

你的for循环结束时有一个分号。

for循环循环但从不执行test会发生什么。因此,a通过迭代设置为-1,然后调用test

在for循环结束时删除分号,它将起作用。

答案 1 :(得分:1)

;语句后面有分号for,表示for正文 为空。因此,此循环将迭代,直到条件为false。当条件为假时,a将为-1。然后,在for循环之外,您使用以下参数调用test方法:

test(-1, line);

将导致IndexOutOfBounds例外。

请注意,您可以访问a之外的for,因为您已将声明在循环之外,即使在循环结束后也可以访问它。

为了更好地可视化,您的代码相当于:

for ( a = line.getSize() - 1; a >= 0; a--) {
    // empty
}

test(a, line);    // here 'a' will be -1