ООП не дает ожидаемого результата с заявлениями и> знаками - PullRequest
2 голосов
/ 08 ноября 2011

Ниже приведен мой код: этот код используется для поиска окружающих узлов, когда предоставляется данный узел.

т.е.

enter image description here

for(var i:uint = 0;i < nodes.length; i++){
            test_node = this.nodes[i];
            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)

        }
/*
nodes contains an array of objects.
node is an object I want to use as my test variable. 
property row contains the row in which the object is located
proerty column contains the cloumn in which the object is located
*/  

Я получаю правильные результаты (поскольку я следую учебному пособию), хотя я не уверен, почему?

это то, о чем я думаю.

  1. , если строка test_node находится ниже расположения строки узла, или если строка test_node находится выше строки узла - продолжить

  2. если столбец test_node находится слева от расположения столбца узла, продолжить или если столбец test_node находится справа от столбца узла - продолжить.

Предположим, чтоприведенный выше случай с изображением.
Следовательно, окружающие_узлы не должны содержать все объекты в узлах (кроме фактического узла), поскольку каждый объект будет удовлетворять приведенному выше утверждению, поскольку и объект будет или выше, или ниже узлаили слева или справа от него.

на самом деле этот код находит только узлы, окружающие узел (красный квадрат).

мог бы кто-нибудь реально помочь мне понять это утверждение.

спасибо

1 Ответ

2 голосов
/ 08 ноября 2011

Просто замените условные числа числами, и вы увидите, как это работает.

На изображении выше узел находится в строке 4 и столбце 4 (на основе 0), и давайте возьмем test_node для строки 2, а затем

if (test_node.row < node.row - 1 || test_node.row > node.row + 1)

переводится в

if (2 < 3 || 2 > 5 ) continue

продолжить означает «пропустить оставшуюся часть этой итерации и начать следующую»

, так что теперь возьмите test_node для строки 3 и столбца 3

if ( 3 < 3 || 3 > 5 ) continue
if ( 3 < 3 || 3 > 5 ) continue

все 4 условия являются ложными, поэтому он добавляет его вround_nodes

- РЕДАКТИРОВАТЬ -

Кстати, если вы пометите свой цикл, будет более разборчиво, что происходит

iterateNodes : for(var i:uint = 0;i < nodes.length; i++){
    test_node = this.nodes[i];
    if (test_node.row < node.row - 1 || test_node.row > node.row + 1) continue iterateNodes;
    if (test_node.column < node.column - 1 || test_node.column > node.column + 1) continue iterateNodes;
    surrounding_nodes.push(test_node);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...