2013-02-13 47 views
1

我正在做這個項目,試圖重現謝林的分離模型。我有一個函數(在下面)正在測試以查看與當前正在測試的單元格相比,陣列的四個直接相鄰的單元格是相同還是不同還是空的。Javascript測試數組的角點(Grid)

對於陣列中的每個單元格,都有四個可能的點需要測試。但在角落和側面,顯然你不能測試超出界限的空間。所以在這個函數中,如果它找到了一個越​​界空間,那麼它會減少單元周圍的數字總數。然而,它一直崩潰告訴我,我有一個未捕獲的引用錯誤:無法讀取未定義的屬性'0'。我不知道爲什麼它會崩潰。

此代碼的最後一行是商品(相似單元格)的數量和它周圍的單元格總數(空單元格不計數),並獲得相似的百分比。

任何幫助將不勝感激告訴我爲什麼它可能會崩潰,並給我一個錯誤?謝謝!

model.Test = function(i, j) 
{ 
var numberToTest= 4; 
var goods= 0; 

if ((i - 1) >= 0) 
{ 
    if (model.BoardArray[i-1][j] != "E") 
    { 
     if (model.BoardArray[i][j] == model.BoardArray[i-1][j]) 
     { 
      goods++; 
     } 
    } 
    else 
    { 
     numberToTest--; 
    } 
} 
else 
{ 
    numberToTest--; 
} 


if((i + 1) < $("#BoardSizeValue").val()) 
{ 
    if (model.BoardArray[i+1][j] != "E") 
    { 
     if (model.BoardArray[i][j] == model.BoardArray[i+1][j]) 
     { 
      goods++; 
     } 
    } 
    else 
    { 
     numberToTest--; 
    } 
} 
else 
{ 
    numberToTest--; 
} 


if ((j - 1) >= 0) 
{ 
    if (model.BoardArray[i][j-1] != "E") 
    { 
     if (model.BoardArray[i][j] == model.BoardArray[i][j-1]) 
     { 
     goods++; 
     } 
    } 
    else 
    { 
     numberToTest--; 
    } 
} 
else 
{ 
    numberToTest--; 
} 


if ((j + 1) < $("#BoardSizeValue").val()) 
{ 
    if (model.BoardArray[i][j+1] != "E") 
    { 
     if (model.BoardArray[i][j] == model.BoardArray[i][j+1]) 
     { 
      goods++; 
     } 
    } 
    else 
    { 
     numberToTest--; 
    } 
} 
else 
{ 
    numberToTest--; 
} 


var similar = $("#SimilarSlider").val()/100; 
if (numberToTest == 0) 
{ 
    return false; 
} 
else 
{ 
    var needed = goods/numberToTest; 

    if (needed >= similar) 
    { 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 
} 

回答

0

從看你的代碼,你只會得到一個Reference Error: Cannot read property '0' of undefined.如果i是出數組的邊界。

我想問題可能在這部分代碼:

if ((i - 1) >= 0) { 
    if (model.BoardArray[i-1][j] != "E") { 
     if (model.BoardArray[i][j] == model.BoardArray[i-1][j]) { 

如果i = $("#BoardSizeValue").val()$("#BoardSizeValue").val()是數組大小的一開始的索引,然後[i-1]會好起來的,但不是[i]。因此,嘗試調整您的代碼如下:

if ((i - 1) >= 0 && i < $("#BoardSizeValue").val()) { 
    if (model.BoardArray[i-1][j] != "E") { 
     if (model.BoardArray[i][j] == model.BoardArray[i-1][j]) { 

這也將適用於j比較爲好。

+0

該部分代碼中存在一些輕微錯誤。我有滑塊給我的數組大小,有一個錯誤 – 2013-02-13 04:57:53