如何将“IF CONDITION”重写为 ON 3 分钟和 OFF 10 分钟直到 4 小时(240 分钟)

Posted

技术标签:

【中文标题】如何将“IF CONDITION”重写为 ON 3 分钟和 OFF 10 分钟直到 4 小时(240 分钟)【英文标题】:How to Rewrite "IF CONDITION " for ON for 3min and OFF for 10min until 4Hr (240min) 【发布时间】:2020-07-16 15:12:36 【问题描述】:

我想缩短 if 条件。我怎样才能简化这个? 其中 step = 1 到 240 in min

我想要第一个 3 分钟开启 = 1,第二个 10 分钟关闭 = 0,它将重复到 248 分钟 我写了由许多条件组成的“如果条件”。如何用简单的表达式重写代码

   #include "udf.h"
   DEFINE_PROFILE(ON_3min_OFF_10min_4Hr,thread,position) 
   
   face_t f;
   real step,hf_3min,hf_10min;
   hf_3min = 1;     /*ON */
   hf_10min = 0;       /*OFF */
   step=N_TIME;
   begin_f_loop(f,thread)
   
   
      if ((step<=3) || ((step>13) && (step<=16)) || ((step>26) && (step<=29)) || ((step>39) && (step<=42)) || ((step>52) && (step<=55)) || ((step>65) && (step<=68)) || ((step>78) && (step<=81)) || ((step>91) && (step<=94)) || ((step>104) && (step<=107)) || ((step>117) && (step<=120)) || ((step>130) && (step<=133)) || ((step>143) && (step<=146)) || ((step>156) && (step<=159)) || ((step>169) && (step<=172)) || ((step>182) && (step<=185)) || ((step>195) && (step<=198)) || ((step>208) && (step<=211)) || ((step>222) && (step<=225)) || ((step>235) && (step<=238)))
        
          F_PROFILE(f,thread,position)=hf_3min;
        
    else
        
          F_PROFILE(f,thread,position)=hf_10min;
        
   
  end_f_loop(f,thread)

【问题讨论】:

请选择 C ​​或 C++,因为答案很可能不同。 @ChaseRLewis:我的想法更像是std::vectorstd::pair&lt;int, int&gt;,每个条目都是范围之一。类似的想法。 我会使用 2D-Array 并对其进行迭代,因为它始终属于这种类型:(step &gt;n1)&amp;&amp;(step &lt;= n2) 重要的第一件事是解释这个条件测试什么。范围总是3长吗?他们总是相隔 10 (基于(step &lt;= 211)) || ((step &gt; 222) 不是)? 这个问题说得不好。您应该描述这段代码应该做什么。如果我们知道我们可以用许多不同的更狡猾的方式来解决它。另请阅读Magic Numbers。 【参考方案1】:

从您检查的范围来看,您的代码似乎等同于:

if ((step - 1) % 13 < 3) 
  F_PROFILE(f, thread, position) = hf;
 else 
  F_PROFILE(f, thread, position) = hf2;

您需要注意第一个条件下缺少的下限,以及后两个条件下的边界变化,以防这是故意的。

【讨论】:

((step &gt; 222) &amp;&amp; (step &lt;= 225)) 及其后的位置与之前的范围相比移动了一个位置。 @t.niese 是的,你是对的。我的猜测是这实际上是一个错字:p 可能是 OP 手动计算了条件。 另一个不写出这样大量表达式的好理由 我也这么认为。这就是为什么我要求 OP 解释该表达式的含义 ;) 我不认为这是“正确的”。如果我把 13 放在那里,我会得到 1 13 而不是 step >= 13 时,这是真的。原始范围内只包含 0,但就像你说的那样,这很奇怪:/ 所以也许不应该包含 0,这是一个错误。

以上是关于如何将“IF CONDITION”重写为 ON 3 分钟和 OFF 10 分钟直到 4 小时(240 分钟)的主要内容,如果未能解决你的问题,请参考以下文章

如何将set操作表达式编程为函数的参数?

if Condition 在执行 segue 之前为 True

[C]if (CONDITION)语句中CONDITION的情况

是否可以在“if condition”中使用多个案例来访问同一个函数

如何评估带有大量 && 和 || 的 If 语句状况

PHP-Netbeans:如何更改多条件 if 语句的格式