2016-02-13 90 views
-2
for (int i = 0; i < totalArray.size(); i++){ 

     studentNumber.add(Long.parseLong(totalArray.get(i * 3))) 
     lastName.add(totalArray.get((i * 3) + 1)); 
     firstName.add(totalArray.get((i * 3) + 2)); 

我不确定这里发生了什么。我在这段代码中遇到了索引超出范围的错误。 totalArray.size()是42但是我得到了第二行(parseLong)在索引42处的错误。索引超出界限错误ArrayList

+1

自索引从0开始,最大索引大小为1。 –

回答

0

正如cricket_007指出的,在你的for语句的第14次迭代中,我是14,你的第二行试图访问你的索引的元素42(数组的最后一个元素被作为元素41访问,因为它的索引为0 )。

要在适当的地方停止for语句,只需在最后一行代码中执行相反的操作。 (由Benjamin Lowry指出)。

0

您在studentNumber.add(Long.parseLong(totalArray.get(i * 3)))行中将您的i乘以3,所以当i> = 14时,它会超出范围。

尝试将其设置为studentNumber.add(Long.parseLong(totalArray.get(i)))并运行它。您可能想将您的* 3置于第一个括号之外,但我无法扣除您的逻辑。

0

i是14时,您将获得索引42与i * 3。对于大小为42的列表来说,这是超出界限的。

0

您的第三行将数字加倍。这意味着如果我是30(当前设置可能),那么当三倍时,将等于90,这显然高于你的最大尺寸。

你需要做的

for (int i = 0; i < (totalArray.size() - 2)/3 ; i++) 

为了使您的代码工作。否则,你的三条线都会超过最大值。