1

配列の中央に数値(73)を追加してから、すべての数値を中央から1つ上に移動して、数値が上書きされないようにするにはどうすればよいですか。これが私のコードです。これまでのところ、73は真ん中にあり、その後の数字はすべて上に移動するはずです。ARRAYLISTは使用できません。

int midpoint = length/2;
array[midpoint] = 73;

for (int i = midpoint; i<length; i++){
    aNums[i+1] = array[i];
    System.out.print(array[i] + " ");
}

displayArray1(array,length);
4

3 に答える 3

1

List、またはより具体的にはArrayList:を使用します

ArrayList<Integer> list = new ArrayList<>();

// ... put stuff in list

int midpoint = list.size()/2;
list.add(midpoint, 73);
于 2013-02-27T17:37:54.397 に答える
1

配列に追加することはできません。まず、より大きな配列を作成する必要があります。

int[] newArray = new int[array.length + 1];

次に、配列の前半をコピーする必要があります

for(int i = 0; i < midpoint; i++) {
    newArray[i] = array[i];
}

次に、新しい中点を

newArray[midpoint] = 73;

次に、残りの半分をコピーします

for(int i = midpoint + 1; i < array.length; i++) {
    newArray[i+1] = array[i];
}

そして、newArrayには新しい中点があります。

技術的には、最後の3つの手順は任意の順序で実行できますが、この順序で実行する方がはるかに読みやすくなります。これで、displayメソッドを呼び出したり、実際に好きなことを実行したりできます。

arrayCopy配列要素の移動を支援できると呼ばれるユーティリティメソッドがあります。使用が許可される場合と許可されない場合があります。パラメータについては少し言葉遣いがありますが、ネイティブコードを利用しているため、実行時の通常のforループよりも少し高速です。

int[] newArray = new int[array.length + 1];
System.arrayCopy(array,0,newArray,0,midpoint);
newArray[midpoint] = 73;
System.arrayCopy(array,midpoint,newArray,midpoint+1,array.length - midpoint);

これらの呼び出しを説明するために、arraycopyは以下を使用します。

System.arrayCopy(arrayFrom, 
                 startPosInArrayFrom, 
                 arrayTo, 
                 startPosInArrayTo, 
                 numElementsToCopy);
于 2013-02-27T17:38:11.883 に答える
0

配列を使用すると、さらに多くの問題が発生します。

配列に裏打ちされたArrayListを使用する

ArrayList l = new ArrayList();

//...fill contents
int index = l.size()/2;
l.add(index, 72);
于 2013-02-27T17:37:52.117 に答える