除非三个条件同时成功,否则如何进入while循环

时间:2016-09-22 19:08:46

标签: while-loop conditional-statements octave

我正在尝试创建一个由三个较小条件组成的复杂条件,用于while循环。我总是想进入循环,除非同时满足所有三个条件。我现在的方式,如果只有其中一个满足,循环退出。我希望它只在他们同时见面时退出。这就是我所拥有的:

INSERT INTO layer (geom) VALUES (ST_Force2D(ST_Transform(ST_ForceRHR(ST_GeomFromText('POLYGON((4832654.676302 7570323.2813639, 4810946.560269 7597840.6115465, 4836629.4017728 7629944.1634263, 4886772.0923279 7629944.1634263, 4902059.4979849 7591725.6492837, 4864452.4800686 7553507.1351411, 4832654.676302 7570323.2813639),(4845190.3489408 7589891.1606049, 4855585.7847875 7610376.2841853, 4876988.1527074 7604567.0700356, 4874847.9159154 7588362.4200392, 4858031.7696927 7575520.9992872, 4845190.3489408 7589891.1606049))', 3857)),998997)));

所以,如果a是1,b是2,c是5,我不想进入循环。 但是如果a是2,b是3,c是5,我想要进入循环,但这不是我的代码所发生的事情。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

如果我理解你想说的话你希望while循环在a = 1,b = 2和c = 5的特定场景中继续之外(与之相反)其中一个人有这个价值。)

因此,您尝试转发的正确陈述是“在(a == 1&& b == 2&& c == 5) false 时继续”即

while !(a==1 && b==2 && c==5)
  % do stuff
endwhile

请注意,您所写的内容并不等同。 看看De Morgan's laws。基本上他们说:

  
      
  1. (A B C)=( A) B) C)
  2.   
  3. (A B C)=( A) B) C)
  4.   

因此(a!=1 && b!=2 && c!=5)!(a==1 && b == 2 && c==5)不同 相反,它与!(a==1 || b == 2 || c==5)相同

<小时/> PS。另一种方法是这样做,可能会更清楚一些:

while true                   % i.e. loop forever

  if a==1 && b==2 && c==5
    break;                   % i.e. exit loop if this condition is true
  end  

  % do stuff
end