I'm doing this exercise where you have to calculate the number of limes needed to get the juice. It needs a switch statement inside which takes out the first element of the "limes" array, (and that works flawlessly). Until i add the condition to count down the wedges: even if in the cases is specified to subtract a determined amount, at every iteration it seems to ignore it and never meeting the needed condition to break the switch statement
here's the code
function limesToCut(wedgesNeeded, limes) {
let limesNeeded = 0
while(limes.length != 0 || wedgesNeeded > 0 ) {
switch (limes[0]) {
case 'small':
limes.shift()
limesNeeded += 1
wedgesNeeded -= 6
break;
case 'medium':
limes.shift()
limesNeeded += 1
wedgesNeeded -= 8
break;
case 'large':
limes.shift()
limesNeeded += 1
wedgesNeeded -= 10
break;
default:
break
}
}
console.log(limesNeeded)
}
//test cases
console.log("case 1")
limesToCut(4, ['medium', 'small'])
console.log("case 2")
limesToCut(80,['small','large','large','medium','small','large','large',])
console.log("case 3")
limesToCut(0, ['small', 'large', 'medium'])
console.log("case 4")
limesToCut(10, [])
where did i go wrong? it seems to not be working even when i exclude the other condition from the loop
quoting @James in the comments:
It's because for some of your test cases, limes.length != 0 || wedgesNeeded > 0
is always true, so it gets stuck in a loop. Consider the case where you need 80 wedges but only have 7 limes which could yield 70 wedges tops (if they were all the largest size). So there are no limes left but wedgesNeeded > 0, so it loops and loops.