非常简单的循环错误Java

时间:2012-11-07 19:11:00

标签: java loops methods for-loop arraylist

我不知道为什么这不起作用。

public static int getMaxPosition(ArrayList<Integer>list)
{
    int max=list.get(0);
    int maxPos=0;
    int curr;
    int c;
    for (c=0; c<list.size(); c++);
    {
        curr=list.get(c);
        if (curr>max);
        {
            maxPos=curr;
            max=curr;
        }
    }

    return maxPos;
}

这段代码在curr=list.get(c);行给出了运行时错误(IndexOutOfBoundsException),我找不到任何合理的理由。

3 个答案:

答案 0 :(得分:4)

您的for循环后有一个分号。 因此,它将执行到c < list.size(),然后当c变为list.size()时它将退出。现在,您的list.get(c)将被执行c = listsize,这超出范围。

for (c=0; c<list.size(); c++); <-- //Remove Semi-colon

此外,内部if后面有一个分号: -

if (curr>max);  <-- // Remove this also.

注意: - 如果您使用{list进行迭代,那么对于其他人而言 {1}}: -

enhanced for-loop

答案 1 :(得分:1)

for (c=0; c<list.size(); c++);

if(curr&gt; max);

删除分号。分号结束了声明。

您的代码应如下所示:

for (c=0; c<list.size(); c++)
{
curr=list.get(c);
        if (curr>max)
        {
            maxPos=curr;
            max=curr;
        }
...

}

答案 2 :(得分:1)

你的for循环之后有一个分号,然后是方括号。分号导致循环执行,然后它落入块中。 for循环将c递增到c == list.size(),然后进入执行块。

这是工作代码:

public static int getMaxPosition(ArrayList<Integer>list)
{
    int max=list.get(0);
    int maxPos=0;
    int curr;
    int c;
    for (c=0; c<list.size(); c++)
    {
        curr=list.get(c);
        if (curr>max)
        {
            maxPos=curr;
            max=curr;
        }
    }

    return maxPos;
}