簡體   English   中英

在數組中移動元素

[英]Moving elements in an array

我有一個對象數組,我想在此數組中添加元素並同時以升序對它們進行排序。盡管我嘗試了許多組合操作,但我始終采用java.lang.ArrayIndexOutOfBoundsException。 這是我的代碼的一部分:

public boolean insert(Person p)
{
    for(int i=0;i<=size();i++)
    {   
        if (c==0)
        {   
            array[0] = p;
            c++;
            return true;
        }
        else
        {   
            if (p.compareTo(array[i])==-1)
            {
                array[i]=p;
                c++;
                for(int j = size(); j>i; j--)
                {
                    array[j]=array[j-1];
                }
            }
            else if((p.compareTo(array[i])==1))
            {
                array[i+1]=p;
                c++;
                for (int j=(size()-1);j>= i+1; j--)
                {
                    array[j+1]=array[j];
                }
            }
            else
            {
                return false;
            }
            return true;
        }
    }
    return false;
}

private int c;
private Person array[];
public SortedPersonList()
{   
    this.array = new Person[c];
}
public int size()
    {
        return c;
    }

刪除for(int i=0;i<=size();i++)的等號。 也就是說,更改為

for(int i=0;i<size();i++)

數組索引從0size-1 因此array[size()]在數組之外。 因此,錯誤。

您的代碼:

    for(int i=0;i<=size();i++)

寫像

    for(int i=0;i<size();i++)  or  for(int i=0;i<=size()-1;i++)

1)您正在將數組初始化為大小0,並且從未調整大小。 數組的大小是固定的,因此要用超出其范圍的項目填充數組,您應該首先創建一個更大的數組,然后將內容復制到其中(這就是ArrayList的工作方式)。

2)找到插入點時,在將其值保留在temp變量中之前,不應覆蓋此位置。 (此外,我不理解代碼中的第三種情況。如果p大於array [i],為什么要插入?您應該重新考慮一下邏輯。)

3)您可能想使用二進制搜索來找到插入點。 它具有比線性搜索更好的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM