簡體   English   中英

嵌套的WHILE循環沒有按預期運行 - Javascript / Google Apps腳本

[英]Nested WHILE loops not acting as expected - Javascript / Google Apps Script

我有一個不按預期行事的功能。 在我繼續之前,我想在前面加上這樣一個事實,即我通常在Mathematica中編程,並且負責將Mathematica函數(我寫的)移植到JavaScript,以便可以在Google Docs電子表格中使用它。 我有大約3個小時的JavaScript經驗......

考慮到晶圓和芯片尺寸(以及其他輸入),整個(小)項目正在計算每個晶圓的總晶片數。 不工作的部分是我檢查模具的任何角落是否在有效半徑Reff之外的地方。

該函數采用X和Y坐標列表,當組合時,創建骰子中心的單個XY坐標。 然后將其放入單獨的函數“maxDistance”中,該函數計算4個角中每個角的距離並返回最大值。 根據Reff檢查此最大值。 如果max在半徑范圍內,則將1加到die計數中。

// 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 <= R效率始終是真實的),我發現,循環執行總數是正確的。

我是如何找到它的:我添加了一些代碼,只打印出函數在每次循環迭代時所做的事情,並看到X和Y是正確的,但是當X ||時,maxDistance函數返回NaN或非常大的值 Y是積極的。 我會研究這個功能。

感謝大家的幫助!

如果我沒有錯,那么當你做的時候,你所采用的元素大於實際的數組大小

while(i <= xCoords.length){

它應該是

while(i <xCoords.length){

但是我更喜歡

for(var i = 0; i <xCoords.length; i ++)

Dunno,如果它可以幫助:)

當你做var a = {10,9,8,7}時,它不是一個數組而是一個對象,你可能意味着var a = []; 或者它是mathematica的東西:)

while (i < xCoords.length) {
    j = 0;
    while (j < yCoords.length) {  

嘗試這個

因此,原來我的嵌套的循環工作正常:當我刪除maxDistance功能,取而代之的是1(使1 <= R效率始終是真實的),我發現,循環執行總數是正確的。

我是如何找到它的:我添加了一些代碼,只打印出函數在每次循環迭代時所做的事情,並看到X和Y是正確的,但是當X ||時,maxDistance函數返回NaN或非常大的值 Y是積極的。 我會研究這個功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM