2013-02-13 1 views
1

나는이 프로젝트를 수행하여 Schelling 's Segregation 모델을 재현하려고합니다. 필자는 배열의 4 개의 인접한 인접 셀이 테스트중인 현재 셀과 비교하여 동일하거나 다르거 나 비어 있는지 확인하기 위해 테스트하는 함수 (아래)를 가지고 있습니다.자바 스크립트 테스트 모서리 배열 (그리드)

배열의 모든 셀에 대해 테스트 할 수있는 네 개의 가능한 지점이 있습니다. 그러나 모서리와 측면 지점에서 분명히 범위를 벗어난 테스트 공간은 없습니다. 따라서 함수에서 범위 밖의 공간 중 하나를 찾으면 셀 주위의 총 수를 감소시킵니다. 그러나, 그것은 내가 잡히지 않은 참조 오류가 있음을 알리는 충돌을 계속합니다. 정의되지 않은 '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] 괜찮을 것 배열 크기의 1 인덱스는 아니지만 [i] :

나는 문제가 코드의이 부분에있을 수 있습니다 생각합니다. 그래서 여기에 코드를 조정 해보십시오 :이 또한뿐만 아니라 j 비교에 적용됩니다

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

.

+0

코드의 해당 부분에 약간의 오류가있었습니다. 나는 하나의 오류로 인해 배열의 크기를 나에게주는 슬라이더를 가지고 있었다. –