如果语句逻辑 - 对象数组

时间:2013-03-14 16:46:58

标签: c++ if-statement

这发生在具有循环索引ij的两个循环内。

i表示正在检查的对象,j是包含前五个numshares和另一个数组中相关买方名称的数组。这是作业的一部分,所以我对这个结构很有帮助。

  • tArray:一个对象数组,其中包含numSharesbuyerName作为每个对象的属性。
  • calcstring:包含买方名称
  • calctotal:包含买方名称的份额(numshares

我发现五个买家的名字有最高的numshares并存储它们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;
}

1 个答案:

答案 0 :(得分: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;
}