[英]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++)
數組索引從0
到size-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.