2

100 個のランダムな (長い) 要素を持つ配列を作成するプログラムを作成しています。

主要

byte maxSize = 100;
HighArray arr = new HighArray(maxSize);

for (byte j =0; j < maxSize; j++)
arr.insert((long)(Math.random()*99));

HighArray クラスにある removeMax() メソッドを呼び出すと、

public long getMax()
    {
        long max = -1;

        for (byte i =0; i < nElems; i++)
        {
            if(max < a[i])
                max = a[i];
        }

        return max;
    }

    public long removeMax()
    {
        long max = getMax();
        delete(max);
        return max;
    }

public boolean delete(long value)
    {
        int j;
        for(j=0; j<nElems; j++)        // look for it
            if( value == a[j] )
                break;
        if(j==nElems)                  // can't find it
            return false;
        else                           // found it
        {
            for(int k=j; k<nElems; k++) // move higher ones down
                a[k] = a[k+1];
            nElems--;                   // decrement size
            return true;
        }

範囲外の配列を取得します: 100 例外。これは、配列が 100 要素の範囲外にあることを意味すると思いますが、要素を追加するのではなく要素を削除しているので意味がありません。最初にアレイを作成したとき、エラーは発生しませんでした。

私の IDE (Intellij IDEA) によると、main から removeMax() を呼び出すと問題が発生します。

エラーを誤解している場合は、お知らせください。詳細やコードが必要な場合は、お知らせください。

4

1 に答える 1

1

あなたが持っているコードで私が言えることから、問題はここにあります:

a[k] = a[k+1];

代わりにこれを行います:

a[k] = a[k-1];

K に の値を割り当てJJが最後の反復 (100) にあるときに、それに 1 を追加すると、割り当てられた 100 よりも大きい 101 の値が得られます。

于 2013-09-23T23:33:38.473 に答える