0

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

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;
}

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

4

3 回答 3

4

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

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

此外,如果你的内部有一个分号: -

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

注意:-如果您迭代使用,它对其他人来说更易读,对您来说更容易:-listenhanced for-loop

for (int curr: list) {
   if (curr>max) {
       maxPos=curr;
       max=curr;
   }
}
于 2012-11-07T19:12:45.737 回答
1
for (c=0; c<list.size(); c++);

 如果(当前>最大值);

去掉分号。分号结束语句。

您的代码应如下所示:

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

}

于 2012-11-07T19:13:24.503 回答
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;
}
于 2012-11-07T19:17:10.193 回答