1

私はこのプロジェクトをシェリングの分離モデルを再現しようとしています。配列の4つの隣接するセルが、テストされている現在のセルと比較して同じか、異なるか、または空であるかどうかを確認するためにテストしている関数(以下)があります。

アレイ内のすべてのセルに対してテストされる可能性のある4つのスポットがあります。しかし、コーナーやサイドスポットでは、明らかに範囲外のスペースをテストすることはできません。したがって、関数では、範囲外のスペースの1つが見つかった場合、セルの周囲の合計数を減らします。ただし、キャッチされていない参照エラーがあることを通知してクラッシュし続けます:未定義のプロパティ「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;
    }
}
}
4

1 に答える 1

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()が配列サイズの1ベースのインデックスである場合、[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これは、比較にも当てはまります。

于 2013-02-13T04:52:56.463 に答える