我正在尝试制作一个可以分配给定数量的变化的程序。基本上我有一种方法来查看库存货币是否可以满足给定值。
这是循环:
private int check(int v)
{
int in = v;
for (int i = valueTable.Length; i >= 0; i--)//from biggest coin to smallest
{
for (int j = 0; j < supplyTable[i-1]; j++)//for the supply of the particular coin
{
if (in >= coinValueTable[i-1] && coinSupplyTable[i+1] > 0)
in -= coinValueTable[i-1];
}
}
return rt;
}
运行debug时,外部循环的第一次迭代似乎只建立第二个循环,并且不执行它。内循环仅在外循环的第二次迭代中执行,这实际上意味着我错过了valueTable中的最后一个值。我用for循环玩了一下,但似乎总是错过了数组的末尾。
关于为什么内循环不会在外环的第一次迭代中运行的任何想法?提前致谢。
答案 0 :(得分:3)
您已设置coinSupplyTable[7] == 0
,因此第一次迭代(采用最后一个元素)自然具有条件j < 0
,该条件立即为false,因此循环不会运行。
没有错;没有股票意味着没有内循环。
此外,内部循环内的if
条件不正确。您访问coinSupplyTable[i+1]
,这将导致索引超出范围异常。
最后,你确定需要内循环吗?在我看来,你只需要外循环迭代每种硬币类型,然后检查供应。