Conrade
Conrade

Reputation: 3

Why does my while loop condition not end the loop?

I am confused as to why my function continues to loop. wedgesNeeded = number, limes = array

function limesToCut(wedgesNeeded, limes) {
  let total = 0
  while (wedgesNeeded > 0) {
    let lime = limes.shift()
    switch (lime) {
      case 'small':
        wedgesNeeded -= 6;
        total++;
        break;
      case 'medium':
        wedgesNeeded -= 8;
        total++;
        break;
      default:
    }
  }
  return total
}
console.log(limesToCut(12, ['small','small']));

Upvotes: 0

Views: 50

Answers (1)

realSamy
realSamy

Reputation: 209

Your situation occurs when the wedgesNeeded is much bigger than what you expect; Your loop will empty the limes array but wedgesNeeded is still bigger than 0

function limesToCut(wedgesNeeded, limes) {
  let total = 0
  while (wedgesNeeded > 0 && !!limes.length) {
    let lime = limes.shift()
        switch (lime) {
          case 'small':
            wedgesNeeded -= 6;
            total++;
            break;
          case 'medium':  
            wedgesNeeded -= 8;
            total++;
            break;
          default:
        }
    }
  return total
}

count = limesToCut(200000, ['small', 'medium', 'small', 'medium', 'small', 'medium'])
console.log(count)

Edit: Replaced the if condition by while condition!

Upvotes: 1

Related Questions