ООП не дает ожидаемого результата с помощью операторов if и > знаков

#actionscript-3 #oop

#actionscript-3 #ооп

Вопрос:

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

то есть

введите описание изображения здесь

 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 находится слева от расположения столбца node, продолжайте, или если столбец test_node находится справа от столбца node — продолжайте.

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

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

может ли кто-нибудь действительно помочь мне понять эти инструкции if.

Спасибо

Ответ №1:

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

На изображении выше узел находится в строке 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 условия являются ложными, поэтому он добавляет их в surrounding_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);
}
  

Комментарии:

1. owwwwwwww, вот что означает «продолжить». теперь это имеет смысл.

2. рад, что теперь все ясно, добавил метку в цикл в моем ответе, чтобы сделать его еще более понятным.