【问题标题】:Very simple for loop error Java非常简单的for循环错误Java
【发布时间】:2012-10-27 21:50:19
【问题描述】:

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

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),我找不到任何好的理由。

【问题讨论】:

  • 使用for (int curr : list) 浏览列表会更惯用,而不是乱用索引。

标签: java loops methods for-loop arraylist


【解决方案1】:

for 循环后有一个分号。 所以,它会一直执行到c &lt; 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.

注意:-如果您使用 enhanced for-loop 迭代您的 list :-

for (int curr: list) {
   if (curr>max) {
       maxPos=curr;
       max=curr;
   }
}

【讨论】:

  • “if”语句后面还有一个分号需要去掉
  • 如果您通过debugger 传递您的代码,这些类型的错误可以轻松消除。
【解决方案2】:

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

【讨论】:

  • if (curr&gt;max); 你觉得对吗?
【解决方案3】:
for (c=0; c<list.size(); c++);

 如果 (curr>max);

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

您的代码应如下所示:

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多