0

如果插槽已满,我需要将数组中的插槽数加倍。我的代码目前位于我的层次结构是

public class Stack {
   Object filearray[]= new Object [5];

   public Object push(element) {
       if (filearray[filearray.length - 1] != null) {
            Object temp_array[] = new Object[filearray.length*2];
            int origonal = filearray.length*2;
            //adding the element that the user passed in
            temp_array[0] = element;
            for(int i =0; i<filearray.length;i++) {
                temp_array[i+1] =filearray[i];
            }
            //wiping the filearray clear
            Object filearray[] = new Object [origonal];
            for (int i=0; i<temp_array.length; i ++) {
                filearray [i]=temp_array[i];
            }
            return filearray;
        }
    }
}
4

2 回答 2

3

新的双倍大小数组永远不会保留在实例中,因此请查看以下内容来修复它:

public Object push(element)
{

    if (filearray[filearray.length - 1] != null)
    {
        Object temp_array[] = new Object[filearray.length*2];
        int origonal = filearray.length*2;
        //adding the element that the user passed in
        temp_array[0] = element;
        for(int i =0; i<filearray.length;i++)
        {
            temp_array[i+1] =filearray[i];
        }

        this.filearray = temp_array;
    }
}

您不需要擦除旧数组,只需将其更改为对新分配数组的引用。

于 2013-03-12T10:33:28.533 回答
2

在上面,您正在创建一个新的本地数组,范围为该方法。你没有改变原来的班级成员。这:

    //wiping the filearray clear
    Object filearray[] = new Object [origonal];

创建一个隐藏类成员的数组filearray。您只需要创建临时数组,然后执行以下操作:

    filearray = temp_array;

交换参考。

我可能会调查ArrayList,因为它会在幕后完成所有这些工作,以及(不相关的)Java generics,因为这会给你类型安全(除非你真的想存储Objects

于 2013-03-12T10:29:11.540 回答