【问题标题】:if, elseif, else statement will not execute correctlyif、elseif、else 语句将无法正确执行
【发布时间】:2019-07-29 11:50:38
【问题描述】:

我目前正在编写一段代码,if, elseif, else 语句不会与我合作。这是非常简单的代码,大部分只是我定义的常量:

K1 = 0.174532925;
K2 = 0.20943951;

y0 = [0.0 15.2161 0.0 0.0];

ieout = [];

if isempty(ieout)
    if y0(1)>K1
        ieout = [ieout 5];
    elseif  K1>y0(1)>-K1 && y0(2)<0
        ieout = [ieout 1];
    elseif -K1>y0(1)>-K2 && y0(2)<0
        ieout = [ieout 2];
    elseif -K1>y0(1)>-K2 && y0(2)>0
        ieout = [ieout 3];
    elseif K1>y0(1)>-K1 && y0(2)>0
        ieout = [ieout 4];
    end
end

现在,我的向量y0 具有所有zeroz,除了第二个位置是正数,所以这意味着应该执行最后一个elseif 语句。情况并非如此,而是执行最后一个语句之前的语句,并且我的向量 ieout 得到一个标量元素 3 而不是 4

这让我很困惑,为什么会这样?

【问题讨论】:

    标签: matlab if-statement logical-operators


    【解决方案1】:

    您不能像1&lt;y&lt;2 这样链接逻辑运算符。你必须使用1&lt;y &amp;&amp; y&lt;2 所以:

    K1 = 0.174532925;
    K2 = 0.20943951;
    
    y0 = [0.0 15.2161 0.0 0.0];
    
    ieout = [];
    
    if isempty(ieout)
        if y0(1)>K1
            ieout = [ieout 5];
        elseif  K1>y0(1) && y0(1)>-K1 && y0(2)<0
            ieout = [ieout 1];
        elseif -K1>y0(1) && y0(1)>-K2 && y0(2)<0
            ieout = [ieout 2];
        elseif -K1>y0(1) && y0(1)>-K2 && y0(2)>0
            ieout = [ieout 3];
        elseif K1>y0(1) && y0(1)>-K1 && y0(2)>0
            ieout = [ieout 4];
        end
    end
    

    【讨论】:

    • 我明白了,我认为这些有问题,与 Python 不一样。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2019-08-28
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多