[英]How many items can be taken from an array with given order size
我有一個數組,其中包含數字,數組的順序是固定的。
我想看看我的訂單大小可以從這個數組中取出多少個項目
我的代碼給出了錯誤的結果,例如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());
您的代碼有三個問題:
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());
使用下面的代碼。 我為您整理了一些東西。
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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.