【问题标题】:2D Array - DS Nested for loops javascript no return2D 数组 - DS 嵌套 for 循环 javascript 不返回
【发布时间】:2018-08-24 13:15:58
【问题描述】:

我似乎无法弄清楚为什么函数在第一个 for 循环之后返回“sum”,但在函数结束时却没有。

var a = [
  [1, 1, 1, 0, 0, 0],
  [0, 1, 0, 0, 0, 0],
  [1, 1, 1, 0, 0, 0],
  [0, 0, 2, 4, 4, 0],
  [0, 0, 0, 2, 0, 0],
  [0, 0, 1, 2, 4, 0]
];

function hourglassSum(arr) {
  var sum = 0;
  for (var i = 0; i < arr.length; i++) {
    for (var j = 0; j < arr[i].length; j++) {
      var sumTemp = arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i + 1][j + 1] + arr[i + 2][j] + arr[i + 2][j + 1] + arr[i + 2][j + 2];
      if (!isNaN(sumTemp) && sumTemp > sum) {
        sum = sumTemp;
      }
    }
    document.write('Sum: ' + sum + '<br/>');
  }
  document.write('Sum: ' + sum + '<br/>');
}

hourglassSum(a);

【问题讨论】:

  • 因为你在循环体结束后使用了document.write 语句。请参阅this example 了解如何从函数返回值。
  • 你怎么知道的?
  • 嗨!请环顾四周,并通读help center,尤其是How do I ask a good question? Jon Skeet 的question checklist 也是不错的读物。代码应该做什么?它正在做的事情是什么,而不是这是一个问题?另请注意,由于j 可以是arr[i] 中最后一个条目的索引,因此使用arr[i][j + anything_greter_than_zero] 将导致undefined
  • hackerrank.com/challenges/2d-array/problem 这就是问题所在。我知道我会变得不确定,这就是我使用 isNaN 的原因。该函数工作并在第二个 for 循环内返回 sum,但它不会在函数结束时返回。

标签: javascript loops for-loop matrix


【解决方案1】:

您的问题是您在调用时尝试访问大于数组大小的数组索引:

var sumTemp = arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i + 1][j + 1] + arr[i + 2][j] + arr[i + 2][j + 1] + arr[i + 2][j + 2];

因为您正在循环到数组的大小,然后调用 j + 1 或 j + 2 现在大于数组大小并导致错误。

【讨论】:

  • 代码在第一个 document.write() 中运行良好。它生成未定义但没关系。我没有生成数字的问题,问题是第二个 document.write() 没有输出。
  • 是的,这就是我想说的,因为当您在 j = arr[i].length - 2 上调用 arr[i][j+2] 时,这意味着您正在调用 arr[ i][arr[i].length] 大于数组的大小并导致错误导致退出函数而不继续第二个 document.write。如果你能告诉我你想实现什么,我可以修复你的代码
  • 好的,我明白了。如果我重新运行 a[3][20] 它将返回 undefined 但如果我运行 a[20][3] 我会得到一个错误。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多