索引超出范围错误ArrayList

时间:2016-02-13 03:45:58

标签: java

    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但是我在索引42处得到第二行(parseLong)的错误。

4 个答案:

答案 0 :(得分:0)

您在i行中将studentNumber.add(Long.parseLong(totalArray.get(i * 3)))乘以3,所以当i&gt; = 14时,它会越界。

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

答案 1 :(得分:0)

i为14时,您将获得带有i * 3的索引42。对于大小为42的列表,这是不受限制的。

答案 2 :(得分:0)

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

你需要做

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

为了让您的代码正常工作。否则你的所有三条线都会在某个时刻超过最大值。

答案 3 :(得分:0)

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

要在适当的位置停止for语句,只需执行您在最后一行代码中执行的逆操作。

i < (totalArray.size()-2)/3 

(Benjamin Lowry指出)。