【问题标题】:Nested WHILE loops not acting as expected - Javascript / Google Apps Script嵌套的 WHILE 循环未按预期运行 - Javascript / Google Apps 脚本
【发布时间】:2013-03-22 22:42:47
【问题描述】:

我的功能没有按预期运行。在继续之前,我想先说明一下,我通常在 Mathematica 中编程,并负责将 Mathematica 函数(我编写的)移植到 JavaScript,以便它可以在 Google Docs 电子表格中使用。我有大约 3 小时的 JavaScript 经验...

在给定晶圆和裸片尺寸(以及其他输入)的情况下,整个(小型)项目正在计算每个晶圆的裸片总面积。不工作的部分是我检查模具的任何角落是否在有效半径之外,Reff。

该函数采用 X 和 Y 坐标列表,当它们组合时,创建模具中心的单独 XY 坐标。然后将其放入一个单独的函数“maxDistance”中,该函数计算 4 个角中每个角的距离并返回最大值。对照 Reff 检查该最大值。如果最大值在半径内,则骰子数加 1。

// Take a list of X and Y values and calculate the Gross Die per Wafer
function CoordsToGDW(Reff,xSize,ySize,xCoords,yCoords) {

  // Initialize Variables
  var count = 0;

  // Nested loops create all the x,y coords of the die centers
  for (var i = 0; i < xCoords.length; i++) {
    for (var j = 0; j < yCoords.length, j++) {         
      // Add 1 to the die count if the distance is within the effective radius
      if (maxDistance(xCoords[i],yCoords[j],xSize,ySize) <= Reff) {count = count + 1}
    }
  }

  return count;
}

以下是我得到的一些示例:

xArray={-52.25, -42.75, -33.25, -23.75, -14.25, -4.75, 4.75, 14.25, 23.75, 33.25, 42.75, 52.25, 61.75}
yArray={-52.5, -45.5, -38.5, -31.5, -24.5, -17.5, -10.5, -3.5, 3.5, 10.5, 17.5, 24.5, 31.5, 38.5, 45.5, 52.5, 59.5}
CoordsToGDW(45,9.5,7.0,xArray,yArray)
  returns: 49 (should be 72)

xArray={-36, -28, -20, -12, -4, 4, 12, 20, 28, 36, 44}
yArray={-39, -33, -27, -21, -15, -9, -3, 3, 9, 15, 21, 27, 33, 39, 45}
CoordsToGDW(32.5,8,6,xArray,yArray)
  returns: 39 (should be 48)

我知道 maxDistance() 正在返回正确的值。那么,我的简单错误在哪里?

另外,请原谅我用 Mathematica 符号写了一些东西...

编辑 #1:稍微格式化一下。

编辑 #2:根据 showi,我已将 WHILE 循环更改为 FOR 循环,并将

编辑#3:我实际上要做的是获取 [a,b] 和 [a,b,c] 并返回 [[a,a],[a,b],[a,c] ,[b,a],[b,b],[b,c]]

编辑#4:

所以事实证明我的嵌套循环 工作正常:当我删除 maxDistance 函数并将其替换为 1(因此 1

我是如何找到它的:我添加了一些代码,这些代码只是打印出函数在每次循环迭代中所做的事情,并看到 X 和 Y 是正确的,但是当 X || 时 maxDistance 函数返回 NaN 或一个非常大的值Y 为阳性。我会研究一下这个函数。

感谢大家的帮助!

【问题讨论】:

    标签: javascript google-apps-script wolfram-mathematica nested-loops


    【解决方案1】:

    如果我没记错的话,当你这样做时,你所取的元素比实际数组大小多一个

    while (i

    应该是

    while(i

    但我更喜欢

    for (var i = 0; i

    不知道有没有帮助:)

    当您执行 var a = {10, 9, 8, 7} 时,它不是数组而是对象,您的意思可能是 var a = [];或者它是数学的东西:)

    【讨论】:

    • 1.是的,{} 是列表(数组)的 Mathematica 表示法。 2. FOR 循环肯定会减少行数。我已经编辑了我的代码以反映这一点 3. 使小于/小于等于更改。
    【解决方案2】:
    while (i < xCoords.length) {
        j = 0;
        while (j < yCoords.length) {  
    

    试试这个

    【讨论】:

      【解决方案3】:

      所以事实证明我的嵌套循环 工作正常:当我删除 maxDistance 函数并将其替换为 1(因此 1

      我是如何找到它的:我添加了一些代码,这些代码只是打印出函数在每次循环迭代中所做的事情,并看到 X 和 Y 是正确的,但是当 X || 时 maxDistance 函数返回 NaN 或一个非常大的值Y 为阳性。我会研究一下这个函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多