Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么循环是无限的_Javascript_Algorithm - Fatal编程技术网

Javascript 为什么循环是无限的

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) {

我试图解决一个问题,我必须找到所有和为零的子对。 在我的解决方案中,当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。