2012-01-15 5 views
0

配列に値を配置しようとすると、異常な結果が発生します。 私は単純なクラス結果{intスコア、長時間、文字列ID}の配列テーブル[]を持っています 意図はリーダーボードの並べ替えを持つことです。 私のコードは喜んでそれがトップ10に不要な結果を生成する配列アクセス

int ix = 0; 
    int jx = 10; // 
    while (ix < jx) 
    { 
     if (points > sTable[ix].points) 
     { 
      // score is higher move records down 
      for (jx = mNumRecords - 1; jx >ix ; jx--) 
      { 
       sTable[jx] = sTable[jx -1]; 
      } 
      //now add new score 
      sTable[ix].score = score; // all good until here 
      sTable[ix].time = time; 


     } 

     ix++;   
    } 

であれば問題は私が安定し、[IX] .score =スコアを使用してスコアを挿入しようとするということである新しいスコアを挿入するための正しい場所を見つけました。

値はsTable [ix] .scoreとsTable [ix +1] .scoreに書き込まれます。

ixの任意の値で繰り返し実行されます。コードを一歩進んだだけで、コマンドが一度しか実行できないことがわかります。

誰もこれまで見たことがありますか?

+0

ああ。私たちは以前それを見てきました。そして、私たちはすべて、そのために額を叩きました。 :) Binyaminは彼の答えにそこに解決策を持っています。 :) –

答えて

0

これは、オブジェクト参照を配列の次の要素にコピーしたためです。あなたは値をコピーするか、新しいオブジェクトを作成する必要があります。

オプションA:

// score is higher move records down 
for (jx = mNumRecords - 1; jx >ix ; jx--) 
{ 
    sTable[jx].time = sTable[jx -1].time; 
    sTable[jx].score = sTable[jx -1].score; 
} 
//now add new score 
sTable[ix].score = score; // all good until here 
sTable[ix].time = time; 

オプションB:

for (jx = mNumRecords - 1; jx >ix ; jx--) 
{ 
    sTable[jx] = sTable[jx -1]; 
} 
sTable[ix] = new Result(score, time, ""); // Or however you construct the object 
+0

オプションAが私の問題を解決しました。ありがとうBinyamin。一度はっきりと指摘された(彼は頭を叩くと言う!) – Squiggles

関連する問題