【问题标题】:How to make a loop to determine if 2 numbers belong in a given range如何进行循环以确定2个数字是否属于给定范围
【发布时间】:2022-01-21 10:27:55
【问题描述】:

当 x 和 y 都在 c++ 中的范围/间隔 [0,1] 内时,我在制作循环时遇到问题。

double x;
double y;

while(condition)
{
    if(x < 0)
    {
        x = -x;
    }
    else
    {
        x = 2 - x;
    }
    if(y < 0)
    {
        y = -y;
    }
    else
    {
        y = 2 - y;
    }

}

这个有 2 个循环的方法有效:

while((x < 0) || (x > 1)) {do sth}
while((y < 0) || (y > 1)) {do sth}

这不起作用:

while(!((x >= 0) && (x <= 1)) && !((y >= 0) && (y <= 1))) {do sth}

这也不起作用:

while(((x < 0) || (x > 1)) && ((y < 0) || (y > 1))) {do sth}

这会产生一个无限循环(在我的例子中):

while(((x < 0) || (x > 1)) || ((y < 0) || (y > 1))) {do sth}

注意:如果需要,{do sth} 会更改 x 和 y,因此它们最终会进入那个区间(与第一个代码块中的相同)。

注意 2:“不起作用”是指当 x 在区间内且 y

【问题讨论】:

    标签: c++ loops while-loop


    【解决方案1】:

    我会选择一个有名字的专用函数:这样你仍然可以在几周内理解你的代码:-),例如

      auto check_outside_interval_0_1 = [] (double const a) {
        return a < 0.0 or 1.0 < a;
      };
    
      while( check_outside_interval_0_1(x) or
             check_outside_interval_0_1(y) ) {
         // ... do your things here
      }
    

    【讨论】:

    • 正在考虑为它创建一个函数但决定不这样做,因为我只使用它一次而且时间不长。没有测试它,因为我的编译器上没有 auto 但我相信你它可以工作!
    • 只使用一次并不是编写好的可读代码的标准。
    【解决方案2】:

    while ( !( (x>=0 && x=0 && y

    【讨论】:

    • 有效!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 2019-01-13
    • 2019-02-23
    • 2016-01-17
    • 2016-02-14
    • 2021-11-20
    • 2021-03-15
    • 1970-01-01
    相关资源
    最近更新 更多