Javascript 为什么循环是无限的
我试图解决一个问题,我必须找到所有和为零的子对。 在我的解决方案中,当sum==0时,它进入一个无限循环。我在这里做错了什么Javascript 为什么循环是无限的,javascript,algorithm,Javascript,Algorithm,我试图解决一个问题,我必须找到所有和为零的子对。 在我的解决方案中,当sum==0时,它进入一个无限循环。我在这里做错了什么 function sumZero(data) { let left = 0; let right = data.length - 1; let finalArray = []; while (left < right) { let sum = data[left] + data[right]; if (sum === 0) {
function sumZero(data) {
let left = 0;
let right = data.length - 1;
let finalArray = [];
while (left < right) {
let sum = data[left] + data[right];
if (sum === 0) {
finalArray.push([data[left], data[right]]);
} else if (sum > 0) {
right--;
} else {
right++;
}
}
}
函数sumZero(数据){
设左=0;
设right=data.length-1;
设finalArray=[];
while(左<右){
设总和=数据[左]+数据[右];
如果(总和=0){
finalArray.push([数据[左]、数据[右]);
}否则如果(总和>0){
对--;
}否则{
右++;
}
}
}
如果sum==0,则在finalArray中推送项目,但不管理左侧或右侧,因此将永远是相同的项目和相同的总和。如果sum==0,尝试增加left(left++),您的主要问题在于:
else if (sum > 0) {
right--;
} else {
right++;
}
您可能希望将
右侧
替换为左侧
。您得到无限循环的原因是当和<0时。右循环将递增,因此,具有与上一次迭代相同的行为,因此,算法将卡在右++和右循环之间的无限循环中--“当sum==0时,它进入无限循环”-否。当sum==0
时,则函数(和循环)将由于返回而终止…->如果我删除返回语句,它将进入无限。我想你误解了正在发生的事情。我不相信这是因为sum===0,我认为现在发生的是sum从不=0,或者说left永远不会超过right。在我继续讨论我认为如何解决这个问题之前。请分享你输入的数据,我想我看到了主要问题。不过,我要指出,还需要检查如何从添加中获得0。