Путаница в отношении логической логики в цикле for-if - PullRequest
0 голосов
/ 24 декабря 2018

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

Я разработал его таким образом, чтобы выводить «ложь», если есть столкновение (неинтуитивно), и «истину», если нет, так как я буду использовать этот результат позже в операторе ifи я хочу, чтобы он выполнял оператор в случае, если столкновение не происходит.Список называется вершинами.Вероятно, существует множество ошибок, но что меня больше всего смущает, так это логика булевой функции и то, как она выполняется через циклы if и for.

Мой желаемый результат заключается в том, что если новый объект вмешиваетсяс любым объектом, уже присутствующим в списке, функция выведет «false», и она выведет «true» тогда и только тогда, когда объект не помешает любому элементу .Тем не менее, я не думаю, что мой код делает то, что я описал здесь.Принимает ли if первый результат: «true» или «false»?Выводит ли он «true», только если все результаты верны.Я думаю, что это суть моей проблемы (я могу ошибаться).

Возможно, есть гораздо более эффективный способ сделать это (если так, пожалуйста, сообщите мне!), Но сейчас я действительно работаючерез каждый элемент уже в списке с циклом for, а затем написание теста столкновения с оператором if.Мой код ниже:

function test(x, y, len) {
  var k;
  for (k=0; k < vertices.length; k++) {
    if (((y + len) < (vertices[k][1])) || (y > (vertices[k][1] + vertices[k][2])) || ((x + len) < vertices[k][0]) || (x > (vertices[k][0] + vertices[k][2])))
    {
      return false
    } else 
    {
      return true
    }
  }
}

Возможно, что-то не так с самими условиями столкновения ('... или ... или ...'), но я думаю, что этоне тот случай.Я думаю, что-то не так с моей логикой, которую я описал выше.Если кто-нибудь может дать мне какое-то объяснение, которое может прояснить ситуацию, это будет очень цениться.Как вы можете сказать, я новичок в этом.Спасибо!

1 Ответ

0 голосов
/ 24 декабря 2018

Перемещение return true вне цикла for.

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

function test(x, y, len) {
  var k;
  for (k=0; k < vertices.length; k++) {
    if (((y + len) < (vertices[k][1])) || (y > (vertices[k][1] + vertices[k][2])) || ((x + len) < vertices[k][0]) || (x > (vertices[k][0] + vertices[k][2])))
    {
      return false
    } 
  }
 return true;
}
...