当包含减法条件时,我在 JavaScript 中的 while 循环陷入无限循环
My while loop in JavaScript gets stuck in an infinite loop when the subtractive condition is included
我正在做这个练习,你必须计算获得果汁所需的酸橙数量。
它需要一个内部的 switch 语句来取出“limes”数组的第一个元素(并且可以完美地工作)。直到我添加条件来倒计时楔形:即使在 cases 中指定减去确定的数量,在每次迭代中它似乎都会忽略它并且永远不会满足打破 switch 语句所需的条件
这是代码
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, [])
我哪里错了?即使我从循环中排除其他条件,它似乎也无法正常工作
在评论中引用@James:
这是因为对于您的某些测试用例,limes.length != 0 || wedgesNeeded > 0
始终为真,因此它陷入了循环。考虑这样一种情况,您需要 80 个楔形,但只有 7 个酸橙可以产生 70 个楔形顶部(如果它们都是最大尺寸的话)。所以没有酸橙了,只有 wedgesNeeded > 0,所以它循环再循环。
我正在做这个练习,你必须计算获得果汁所需的酸橙数量。 它需要一个内部的 switch 语句来取出“limes”数组的第一个元素(并且可以完美地工作)。直到我添加条件来倒计时楔形:即使在 cases 中指定减去确定的数量,在每次迭代中它似乎都会忽略它并且永远不会满足打破 switch 语句所需的条件
这是代码
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, [])
我哪里错了?即使我从循环中排除其他条件,它似乎也无法正常工作
在评论中引用@James:
这是因为对于您的某些测试用例,limes.length != 0 || wedgesNeeded > 0
始终为真,因此它陷入了循环。考虑这样一种情况,您需要 80 个楔形,但只有 7 个酸橙可以产生 70 个楔形顶部(如果它们都是最大尺寸的话)。所以没有酸橙了,只有 wedgesNeeded > 0,所以它循环再循环。