我不知道为什么这不起作用。
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),我找不到任何合理的理由。
答案 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;
}