这发生在具有循环索引i
和j
的两个循环内。
i
表示正在检查的对象,j
是包含前五个numshares和另一个数组中相关买方名称的数组。这是作业的一部分,所以我对这个结构很有帮助。
tArray
:一个对象数组,其中包含numShares
和buyerName
作为每个对象的属性。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;
}
答案 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;
}