1

私はまともな検索をしましたが、配列を下に移動する作業コードを見つけることができません。私が望んでいるのは、配列の最後の位置に値を格納し、最後の位置を置き換えてから、配列 [20] を配列 [19] に移動することです。これは、プレーヤーが行った最後の 20 の動きをカウントするためのものですが、実際に保存するのに問題があります。これは私がやろうとしたことです

//an int moveArray[20] previously stated and instantiated
int temp1, temp2;

for (int i = moveArray.length - 1; i > 0; i--) 
{
     temp1 = moveArray[i - 1];
     temp2 = moveArray[i - 2];
     moveArray[i - 1] = moveArray[i];
     temp1 = temp2;
}
moveArray[moveArray.length - 1] = intoWalk;

アドバイスや解決策は本当に役に立ちます、ありがとう

4

4 に答える 4

4

私があなたのコードを理解していることから。次のループを使用する必要があります。一時変数は必要ないようです。

for(int i=0;i<moveArray.length-1;i++){ 
     moveArray[i] = moveArray[i+1];
}
moveArray[moveArray.length - 1] = intoWalk;
于 2013-05-22T05:25:26.970 に答える
0
//an int moveArray[20] previously stated and instantiated
int temp1, temp2;
temp1 = moveArray[moveArray.length - 1];
for (int i = moveArray.length - 2; i >= 0; i--) 
{
    temp2 = moveArray[i];
    moveArray[i] = temp1;
    temp1 = temp2;
}

moveArray[moveArray.length - 1] = intoWalk;

上記はあなたが望むことをするはずです。

ただし、これが正しい方法だとは思いません。

私は円形配列と同じ配列を使用します - そのように - 毎回下に移動する必要はありません。

開始インデックスを維持します。それはで始まります

start = 0;

020個の要素がすべて満たされるまで残ります。次の要素が入ってくると、

moveArray[start] = intoWalk;
++start;

いつでも配列を反復処理する場合は、 で開始するstart代わりに で開始し0ます。

int i = start;
do
{
    // do what you want

    i = (i + 1)%20; 

} while (i != start);
于 2013-05-22T05:23:39.480 に答える
0

最初に、すべての要素を 1 行下に移動して、最後の要素を解放します。

サンプル :

String[] sarr=new String[10];
for(int i=0;i<sarr.length;i++){
   sarr[i]=sarr[i+1];
}

次に、新しい変数を最後に割り当てます。

sarr[sarr.length-1]="new value";

このアプローチはより単純で読みやすいです。

編集:はい、ボヘミアンは正しいです。それは ArrayIndexOutOfBounds 例外をスローしていました。その理由はi+1、最後の反復で配列の範囲外のインデックスを参照しようとするためです。

解決策は、最後の要素を null に設定するか、最後の要素の場合は中断することです。

最後の要素を null に設定します。変更後のコードは以下。

int nextElementIndex = i + 1;
sarr[i] = nextElementIndex < sarr.length ? sarr[nextElementIndex] : null;
于 2013-05-22T05:25:47.410 に答える