我有一個對象數組。當數組填滿時,我想創建一個新的數組,它的大小是舊數組的兩倍,並將所有元素轉移過來。我做錯了什麼,我認爲它與我做的事情沒有創建對新陣列的正確引用。這是我的代碼,任何幫助解決這個問題將不勝感激。加倍數組大小(如果已滿)
private int DIRECTORY_SIZE = 6;
Entry [] directory = new Entry[DIRECTORY_SIZE];
private int numberOfElements = 0;
public int getNumOfElements(){
return numberOfElements;
}
public void setDirectorySize(int size){
DIRECTORY_SIZE = size;
}
public int getDirectorySize(){
return DIRECTORY_SIZE;
}
public void addEntry(String surname, String initial, String num) {
// TODO add an entry to an array, also increments numberOfElements variable tracking whats in array
if(getNumOfElements() == getDirectorySize()){ // if array is full
doubleArraySize(); // put temp values into new bigger directory array
}
int i = findFreeLocation();
directory[i] = new Entry(surname, initial, num);
numberOfElements++;
}
private void doubleArraySize(){
Entry[] temp = new Entry[DIRECTORY_SIZE]; //make new temp array same size as old one
for(int i = 0; i < DIRECTORY_SIZE ; i++){
temp[i] = directory[i]; // cycle through array putting all values into temp
// works up to here
}
setDirectorySize(DIRECTORY_SIZE*2); // double size of array
Entry[] directory = new Entry[DIRECTORY_SIZE]; // create new, double size directory array
for(int i = 0; i < temp.length ; i++){
directory[i] = temp[i];
}
}
private int findFreeLocation() {
int i;
for (i = 0; i < DIRECTORY_SIZE; i++)
{
if(directory[i] == null)
{
break;
}
}
return i;
}
出於好奇,你爲什麼重新發明這個輪子? 'ArrayList'增長(不是雙打,IIRC它做150%的東西),爲什麼不使用它? –
「我有一個對象數組,當數組填滿時,我想創建一個新的數組,它的大小是舊數組的兩倍,並將所有元素轉移過來」 - 您是否知道這基本上是ArrayList的作用? –
此外,VARIABLE_NAMES_IN_CAPITALS通常是常量 - 在你的情況下,DIRECTORY_SIZE是*不*常量。這很混亂。 –