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 J,当J在最后一次迭代 (100) 时,您将其加 1,从而得到 101 的值,该值大于分配的 100。

于 2013-09-23T23:33:38.473 回答