JS:这个算法做的很奇怪,(分析)

时间:2018-08-18 21:57:12

标签: javascript

此代码仅来自我的构造函数的一小部分。

第一个输出应该是('1'或'2'),然后是'0',直到结尾;而不是仅使用纯0。它给我1000的0。我不知道为什么。

我用'cols'和'row'变量的较低值进行了测试,并且工作正常。 (它第一次输出:“ 1”,然后输出“ 0”)但是,当列数和行数较高时,问题再次出现。 它的内存限制?我不知道有多少内存。

我应该怎么做才能避免将来出现此问题?我应该使用功能吗?为每个或类似递归?谢谢。

P.N。如果您似乎没有任何问题,请尝试为cols和rows设置更高的值。也许这应该触发问题。

var i, row_rate
var cols = 50
var rows = 31
var count = 0

for (i = 0; i < cols * rows; i++) {

  row_rate = Math.trunc(Math.trunc(i / cols) * 100 / rows)

  if (count > 0) {
    console.log(0)
  }
  else if (row_rate <= 20) {
    // the first time must pass here...
    count++
    console.log(1)
  }
  else {
    // ...or here
    count++
    console.log(2)
  }
}

1 个答案:

答案 0 :(得分:2)

第一个console.log()不是0,而是1,此后记录了一千个零:

enter image description here

(1549的数字表示同一记录行的1549次重复)

问题在于输出不支持该数目的行,因此删除了较旧的行。在Chrome开发者工具(F12)上,您可以检查Group similar来避免此问题: enter image description here

您也可以通过break控制台日志上的0轻松地看到它。在记录1之前,您将看到第一条日志行实际上是0

var i, row_rate
var cols = 50
var rows = 31
var count = 0

for (i = 0; i < cols * rows; i++) {

  row_rate = Math.trunc(Math.trunc(i / cols) * 100 / rows)

  if (count > 0) {
    console.log(0)
    break;
  }
  else if (row_rate <= 20) {
    // the first time must pass here...
    count++
    console.log(1)
  }
  else {
    // ...or here
    count++
    console.log(2)
  }
}