0

スロットがいっぱいの場合は、アレイ内のスロット数を 2 倍にする必要があります。私のコードは現在私の階層にあります

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 に答える