我使用以下简单代码检查MATLAB中elseif
命令的属性:
x = 10;
if x < 0
y = x;
elseif 0 <= x < 2
y = 3*x;
elseif x >= 2
y = 8*x;
end
y
我本来希望自
80
以来的结果是x >= 2
。但是,出乎意料的事情发生了!结果是30
,而不是80
!但为什么?有任何想法吗?
更新:当我将代码(按照答案中的建议)更改为
x = 10;
if x < 0
y = x;
elseif (0 <= x) && ( x < 2 )
y = 3*x;
elseif x >= 2
y = 8*x;
end
y
我得到预期的
80
。正是这种双重条件使我无法接受。 最佳答案
当你写
if 0 <= x < 2
你真的在写(没有意识到)
if (0 <= x) < 2
评估为
if (true) < 2
这是正确的,因为
true
的值为1
。所以这是逐行发生的事情:
x = 10; % x is set to 10
if x < 0 % false
y = x; % not executed
elseif 0 <= x < 2 % condition is (true) < 2, thus true
y = 3*x; % y is set to 3*x, i.e. 30
elseif x >= 2 % since we already passed a condition, this is not evaluated
y = 8*x; % skipped
end % end of composite if
y % display the value of y - it should be 30
顺便说一句,当使用标量时,应该真正使用
&&
运算符,而不是&
运算符。例如参见What's the difference between & and && in MATLAB?关于matlab - MatLab环境中的if语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23726471/