2012-02-08 7 views
0

私は長さが10の 'double'配列を持っています。最初に配列を開始すると、それらの置換を開始するまで、内部の値はすべて '0.0'になります。いったんすべての値を0以外の値に置き換えると、配列に別の数値を「追加」することに決めたら、インデックス0の最初に戻り、プロセスをやり直す古い番号は順番に。静的配列の長さ、値の置き換え

銀行口座取引プログラムの作業。つまり、すべてのトランザクションが0.0から始まる10個のトランザクションの配列があります。その後、引き出しまたは入金を開始すると、各スロットに引き出し/入金された金額が「記録」されます。 11回目のトランザクションを実行すると、最初のトランザクションに戻って最初のトランザクションを置き換え、12番目のトランザクションは2番目のトランザクションに置き換えられます。

編集:配列リストは使用できません。通常の静的長さの配列である必要があります。

+1

あなたは何をしようとしているのかの例を教えてください。私は現在の説明をむしろ不明確にしている。 – NPE

+0

銀行口座取引プログラムの作業。つまり、すべてのトランザクションが0.0から始まる10個のトランザクションの配列があります。その後、引き出しまたは入金を開始すると、各スロットに引き出し/入金された金額が「記録」されます。 11回目の取引を終えると、最初のトランザクションに戻って置き換え、12回目は2回目のトランザクションに置き換えられます。 – user1015523

答えて

2

これは単純なモジュラスの問題です。 Mathy解は次のようになります。

Wrap = currentArrayPos % arrayLength - 1 //need this since arrays start at 0 and length starts counting at 1. 
If Wrap == 1 --> currentArrayPos = 0 
Else --> currentArrayPos = currentArrayPos + 1 

値を置き換えるときは、次の配列位置を繰り返して値を置き換えます。配列の最後の値を置き換えると、モジュラスは、ループバックして最初の値を置き換えるように指示します。

簡単にJavaソリューションは、次のようになります。

for(int i = 0; i < array.length; i++) { 
//logic for calculating new values and exit condition goes here. 
    array[i] = newValue 
    if(i ==> array.length - 1) 
     i = 0 //resets the loop to keep going 

    if(exitCondition) 
     break; //if there's some criteria, get out. } 

それは常に定期的なことではない場合、あなたはちょうどあなたが、アレイ内で置き換え最後の場所を追跡することができますし、必要があるかどうかを判断するために弾性率のことを行いますリセットするかどうか。

リストを使用することの提案も同様に検討する価値はありますが、ポジションを追跡する必要があります。

0

「i」は、各書き込み後インクリメント配列インデックスがある場合は、その端に来たときに、簡単な方法は、配列の周りにラップするには、剰余演算子を使用することです:

int index = 0; 
int arraySize = 10; 
long[] data = new long[arraySize]; 

for (int i=0; i<100; i++) { 
    data[ index++ % arraySize ] = i; // or some other value 
} 

この方法は、お使いの配列は円の形で塗りつぶされ、常に配列の境界に達した後にインデックス0から始まります。

関連する問題