代码之家  ›  专栏  ›  技术社区  ›  vincent thorpe

JS:这个算法做了奇怪的事情,(分析)

  •  0
  • vincent thorpe  · 技术社区  · 6 年前

    这段代码是从我的构造函数中提取的一小部分。

    我在'cols'和'row'变量上用较低的值进行了测试,结果很好。(它第一次输出:“1”,然后输出“0”),但当列和行更高时,问题再次出现。 这是内存限制吗?我不知道有多少记忆。

    我该怎么做,以避免将来出现这个问题?我应该使用函数吗?对于每一个或者类似递归的东西?谢谢您。

    P、 如果你看起来没什么问题,试着给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 回复  |  直到 6 年前
        1
  •  2
  •   Jorge Fuentes González    6 年前

    第一次 console.log() 不是 0 1 ,然后记录一千个零:

    enter image description here

    问题是输出不支持该行数,所以旧的行被删除。在Chrome开发工具(F12)上,您可以检查 Group similar 要避免此问题: enter image description here

    break 在…上 0个 控制台日志。你会发现第一行日志实际上是 在记录 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)
      }
    }