Не удается получить доступ к свойству или методу пустой ссылки на объект при итерации по массиву - PullRequest
0 голосов
/ 08 ноября 2011

Здравствуйте, у меня есть этот метод:

    private function  findConnectedNodes(node:Node):Array{
    var test_node:Node;
    var surrounding_nodes:Array = [];
    for(var i:uint = 0;i <= nodes.length; i++){
        test_node = this.nodes[i]; // contains an array of Node objects

        if (test_node.row < node.row - 1 || test_node.row > node.row + 1) continue;
        if (test_node.column < node.column - 1 || test_node.column > node.column + 1) continue;
        surrounding_nodes.push(test_node)

    }
    return surrounding_nodes;

}

Я получаю эту ошибку: Cannot access a property or method of a null object reference. Эта ошибка появляется в операторе if.

Я думаю, что это связано с переменной test_node, так как отладка flex показывает, что test_node равно NULL. Не уверен, почему это так, как вы можете ясно видеть, что я присваиваю объекты в массиве test_node.

Если я изменю test_node = this.nodes[i]; на test_node = this.nodes[<enter a number>], программа работает

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

i <= nodes.length

Разве это не должно быть i < nodes.length?Таким образом, вы получите нулевой узел на последнем шаге.

1 голос
/ 08 ноября 2011

Во-первых, я бы упростил и увеличил эффективность вашего цикла, используя for each:

private function _findConnectedNodes(node:Node):Array
{
    var surroundingNodes:Array = [];

    for each(var i:Node in nodes)
    {
        // i represents the node in your array for the current iteration

        if(i.row < node.row - 1 || i.row > node.row + 1) continue;
        if(i.column < node.column - 1 || i.column > node.column + 1) continue;

        surroundingNodes[surroundingNodes.length] = i;
    }

    return surroundingNodes;
}

Это также хороший способ избежать чрезмерного повторения за пределами фактической длины массива, как упомянуто в@ alxx ответ, который дает вам null;см:

trace(nodes[nodes.length]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...