0

次のコードがあります。

public void add (int value)
{
    if (numElements == list.length)
        System.out.println("Can't add, list is full");
    else
    {
        int hold=0;

        for (int j = 0; j < numElements; j++)   
        {
            int temp = list[j];
            if (temp <= value)
            {
                hold = j;  
            }
        }

        System.arraycopy(list,hold, list, hold+1 ,numElements-hold);
        list[hold] = value;
        for (int i = 0; i< list.length; i++)
            System.out.print(list[i] + ", ");
        System.out.println();

        numElements++;
    }
}

目的は、配列内の整数を最小から最大の正しい位置に配置することです (挿入ソート)。

次のテストコードを実行すると:

myList.add(100);
myList.add(50);
myList.add(200);
myList.add(25);

結果の配列は次のとおりです。[25,50,200,100]

メソッドが呼び出されるたびにデバッグすると、配列は次のようになります。

[100, 0, 0, 0, 0, 0, 0, 0, 0, 0]

[50、100、0、0、0、0、0、0、0、0]

[50、200、100、0、0、0、0、0、0、0]

[25、50、200、100、0、0、0、0、0、0]

ご覧のとおり、200 を入力しようとするとエラーが発生します。

これを修正するのに助けが必要です...ありがとう!

4

1 に答える 1

0

arraycopy()通話は問題ありません。問題は、正しい挿入ポイントがリスト内のすべての要素の後にある場合、ループがこれを決定しないことです。

次のようなものを試すことができます:

for(hold = 0; hold < numElements; ++hold) {
   if(list[hold] > value) break;
}
于 2013-02-14T03:25:49.880 に答える