0

これは、ループ インデックスiとを持つ 2 つのループ内で行われますj

iは調査中のオブジェクトを表し、j上位 5 つの numshares と関連する買い手名を別の配列に含む配列です。これは課題の一部であるため、私はこの構造にかなり縛られています。

  • tArray:各オブジェクトのプロパティとしてnumSharesとを含むオブジェクトの配列。buyerName
  • calcstring: 購入者名が含まれます
  • calctotal: 買い手の名前が含まれます ( numshares)

numshare が最も高い 5 人のバイヤーの名前を見つけて、1. [0] から 5. [4] に格納しています。

ただし、プログラムをステップ実行すると、各要素を配列にプッシュして挿入するのではなく、反復numsharesよりも高いことに気付きましたcalctotal[1]numshares

行は下に移動するのではなく、calctotal[j+1] = tVar単に置き換えます。calctotal[2]calctotal[2]calctotal[3]

この問題を解決する方法を知っている人はいますか?

繰り返しますが、ベクターなどは使用できません

if(tArray[i].numShares > calcTotal[j])
{
    int tVar = calcTotal[j];
    string tStr = calcString[j];

    calcTotal[j+1] = tVar;                  
    calcString[j+1] = tStr;

    calcTotal[j] = tArray[i].numShares;
    calcString[j] = tArray[i].buyerName;
    break;
}
4

1 に答える 1

1

配列内のすべてを下にシフトするには、下から上にループして、要素 j の後にある配列内の各要素をその前の要素の値に割り当てる必要があります。このループに到達したときに j が 4 の場合、下にシフトするものは何もないため、何も実行されず、calcTotal[4] が単純に上書きされます。

if(tArray[i].numShares > calcTotal[j])
{
    for (int k = 4; k > j; k--) {
        calcTotal[k] = calcTotal[k - 1];
        calcString[k] = calcString[k - 1];
    }

    calcTotal[j] = tArray[i].numShares;
    calcString[j] = tArray[i].buyerName;
    break;
}
于 2013-03-14T16:54:23.667 に答える