0

这发生在具有循环索引i和的两个循环内j

i表示正在检查的对象j,是包含前五个 numshares 和另一个数组中的关联买家名称的数组。这是作业的一部分,所以我完全受制于这个结构。

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

我正在查找具有最高 numshares 的五个买家的姓名并将它们存储为 1. [0] 到 5. [4]

但是,当逐步执行程序时,我意识到 saynumsharescalctotal[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 回答