【问题标题】:simplifying if loops with multiple conditions简化具有多个条件的 if 循环
【发布时间】:2011-10-06 19:22:57
【问题描述】:

我有一个循环:

if A == 1
    A = 2;
end
if B == 1
    B = 2;
end
if C == 1
    C = 2;

等等... 现在这当然需要很长时间才能写出来,但如果我这样写:

if A == 1 || B == 1 || C == 1
    A = 2; B = 2; C = 2;
end

如果其中任何一个参数等于'1',它将更改所有参数 我想要的是一个简单的循环,我可以说如果 A 或 B 或 C 或...等于“X”,则只有等于“X”的新值才会更改为新值,无需像在第一个示例中那样编写它。 谢谢

【问题讨论】:

  • 如果其中多个等于'x'怎么办?它们中的任何一个、一个、一些或全部都可以等于“X”。此外,您发布的代码没有显示循环。
  • 谢谢,这就是我要问的问题,如果没有一个、一个、部分或全部等于'x',我怎样才能得到一个循环,而不必将它声明为一个单独的' if 语句'

标签: matlab


【解决方案1】:

如果你写

if A == 1 || B == 1 || C == 1
    A = 2; B = 2; C = 2;
end

在任何这些条件下,所有 A、B 和 C 都将为 2!和它不一样! 最好的办法是将它们分组到一个向量中。

【讨论】:

    【解决方案2】:

    我认为您不应该使用不可读的代码,但从技术上讲,您可以将其缩减为三行而无需 ifs:

    A = abs(sign(A - 1)) * A + (1 - abs(sign(A - 1)) * 2
    (same for B and C)
    

    是的,这太疯狂了,正如我所说,我不会推荐它......

    【讨论】:

      【解决方案3】:

      也许如果你将它们分组在一个向量中,你可以这样做:

      params = [A B C];
      params(params==1) = 2;
      

      【讨论】:

      • 谢谢,这将节省我大约 1000 行脚本!
      【解决方案4】:

      如果您可以更改代码以使一个变量指示不同的情况,switch 语句提供了一种优雅的方法来解决您的任务。

      switch yourNumber
          case 1
              A = 2;
          case 2
              B = 2;
          case 3
              C = 2;
          otherwise
              disp('unknown value');
      end
      

      yourNumber 可以赋值为 1,2 或 3。

      【讨论】:

      • 感谢您的帮助,但正如(我引用的):“即switch仅执行第一个匹配的情况;后续匹配的情况不执行。”我无法将规则应用于每个参数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 2018-09-19
      • 2017-05-26
      • 2016-02-03
      • 2021-12-28
      • 1970-01-01
      • 2023-01-29
      相关资源
      最近更新 更多