Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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 Coderbyte数组加法解决方案--For循环与For循环_Javascript_Arrays_For Loop - Fatal编程技术网

Javascript Coderbyte数组加法解决方案--For循环与For循环

Javascript Coderbyte数组加法解决方案--For循环与For循环,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我试图理解数组加法CoderByte问题解决方案中的逻辑。下面是问题提示--“使用JavaScript语言,让函数ArrayAdditionI(arr)获取存储在arr中的数字数组,如果数组中的任何数字组合相加等于数组中的最大数字,则返回字符串true,否则返回字符串false。例如:如果arr包含[4,6,23,10,1,3]输出应返回true,因为4+6+10+3=23。数组不会为空,不会包含所有相同的元素,并且可能包含负数。” 这是一个有效的解决方案,但是我在for循环中丢失了for循环。

我试图理解数组加法CoderByte问题解决方案中的逻辑。下面是问题提示--“使用JavaScript语言,让函数ArrayAdditionI(arr)获取存储在arr中的数字数组,如果数组中的任何数字组合相加等于数组中的最大数字,则返回字符串true,否则返回字符串false。例如:如果arr包含[4,6,23,10,1,3]输出应返回true,因为4+6+10+3=23。数组不会为空,不会包含所有相同的元素,并且可能包含负数。”

这是一个有效的解决方案,但是我在for循环中丢失了for循环。为什么不总是I=j的情况,因为for循环都是从计数器0开始的。那么它不总是0=0吗

  function ArrayAdditionI(arr) { 
  arr.sort(function(a,b){return a - b})
  var largest = arr.pop();
  var sum = 0;
  for (var i = 0; i < arr.length; i++){
    sum += arr[i];
    for (var j = 0; j < arr.length; j++){
      if (i != j) {
        sum += arr[j];
        if (sum == largest) {
          return true;
        }
      }
    }
    for (var k = 0; k < arr.length; k++) {
      if (i != k) {
        sum -= arr[k];
        if (sum == largest) {
          return true;
        }
      }
    }
    sum = 0;
  }
  // code goes here  
  return false; 

}
函数数组添加(arr){
sort(函数(a,b){返回a-b})
var最大=arr.pop();
var总和=0;
对于(变量i=0;i

谢谢!

我制作了&user3085131:

为了进一步解释k循环,它用于按数组值最初添加的顺序进行回溯和减去数组值,以产生其他方法无法获得的新结果

如果没有k循环,您无法解决许多潜在的数组(尽管由于缺乏适当的测试,它实际上会通过coderbyte测试用例)

考虑[1,2,3,98100]…这应该通过,因为2+98=100。但是,如果没有k循环,它将不会通过。如果记录没有k的求和结果,您将看到:

3 (1 + 2)
6 (3 + 3) 
104 (6 + 98) 
3 (2 + 1) 
6 (3 + 3) 
104 (6 + 98) 
4 (3 + 1) 
6 (4 + 2) 
104 (6 + 98) 
99 (98 + 1) 
101 (99 + 2) 
104 (101 + 3) 

然而,对于k循环,在i的第二次迭代中,它将通过,因为它将从104中减去1,然后从103中减去3,达到100。

问题是,在带有“i”变量的for循环中,有2个for循环。 变量“i”始终为0,直到完成对内部循环2的迭代

for(变量i=0){
对于(var j=0){}
对于(var k=0){}

}
完整的
j
循环在
i
循环的每次迭代中都会运行。库贝托,谢谢你的响应。我仍然迷路了。如果j循环在i循环的每次迭代中运行,那么如果(i!=j),行总和+=arr[j]不总是无关紧要的吗总是这样吗?不,不总是这样。第一次,
i
j
都是0。然后
i
是0,但是
j
是1。然后
i
是0,但是
j
是2。等等……是的!非常感谢。但是为什么“k”循环?非常肯定没有它它会工作,对吗?