问题描述
我有一个数组,其中包含数字,数组的顺序是固定的。
我想看看我的订单大小可以从这个数组中取出多少个项目
我的代码给出了错误的结果,例如500个单位可以购买第2个项目,第3个项目为0.66,所以总共可以购买2,66个,但是代码给出了4。对于250个单位,我可以将第一个项目全部购买,而第二个为0.75项目总数为1,75,但代码为1.5。
对于300给出2,这是正确的,但通常给出错误的结果。
我已经更改了for的内部或外部的结果行,如果条件会影响结果,但结果又是错误的(对于给定的数组2100单位,ordersize将使用所有6个结果的项目)
function calculateOrder() { var coinArray = [100, 200, 300, 400, 500, 600]; var orderSize = 500; var sum = 0; var i = 0; for (i = 0; i < coinArray.length - 1; i++) { if (sum < orderSize) { sum += coinArray[i]; } return i + (orderSize - sum) / coinArray[i]; } } document.write(calculateOrder());
1楼
Brian Adams
1
2019-03-03 01:54:22
您的代码有三个问题:
-
for
循环执行if
语句,然后执行return
语句,因此它始终在第一次迭代中返回 。 -
for
循环需要迭代,直到i < coinArray.length
-
所编写的循环迭代一次 ,以使
return
语句中的值正确。
这是纠正这些问题的版本:
function calculateOrder() { var coinArray = [100, 200, 300, 400, 500, 600]; var orderSize = 500; var sum = 0; var i = 0; for (i = 0; i < coinArray.length; i++) { if (sum + coinArray[i] > orderSize) { // if orderSize is exceeded return i + ((orderSize - sum) / coinArray[i]); // 2 + (0.66) } sum += coinArray[i]; // else add to sum } } document.write(calculateOrder());
2楼
Aniket G
1
已采纳
2019-03-03 01:56:32
使用下面的代码。 我为您整理了一些东西。
- 创建一个变量来存储您当前拥有的金额 。 因此,每当您“购买”一件商品时,您都会减去所购买的商品。
- 我改变了一些逻辑使其工作。 基本上,return语句将您的当前金额除以所需金额,以获取您可以购买的部分商品,然后dds已购买的商品数量 。
- 另外,您还需要在其他位置放置其他内容。 如果if语句结果为false ,则执行else,因此,如果您没有足够的钱购买该物品,则执行else。
-
return
中断了您的函数,因此这就是您之前的代码无法正常工作的原因之一。 for循环将执行一次 ,然后中断。 -
for
循环必须以coinArray.length
。 你可能以为你所需要的- 1
存在,因为数组索引的从0开始,但由于for循环不足和不小于或等于将最后索引处结束。
function calculateOrder(orderSize) { var coinArray = [100, 200, 300, 400, 500, 600]; var amountOfMoney = orderSize; for (var i = 0; i < coinArray.length; i++) { if (amountOfMoney > coinArray[i]) { amountOfMoney -= coinArray[i]; } else { return i + amountOfMoney / coinArray[i]; } } } document.write(calculateOrder(500));