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ループの後にセミコロンがあります。したがって、 まで実行され、 になるc < list.size()と終了します。今、あなたの意志はそのために実行されますが、これは範囲外です。clist.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ループの後にセミコロンがあり、次にブロックブラケットがあります。セミコロンを使用すると、ループが実行され、ブロックにドロップされます。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 に答える
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 に答える