考虑以下代码
t = ones(3,5)
Ind2save = find(t(1,:) == 0,1,'first')
因此,例如,我尝试查找第一行的第一个零位是否也是零,因此,如果第一个元素为非零,则
if(Ind2save ~= 1 )
disp('no')
end
现在对于上述条件,它不会显示“no”,因为该条件未满足,但是因为所有行都已填充,并且
Ind2save
是一个空矩阵,所以我们要检查另一个条件是否已完全填充,然后if(Ind2save > 1 || isempty(Ind2save))
disp('no')
end
我收到以下错误
Operands to the || and && operators must be convertible to logical scalar values.
我搜索了导致此错误的原因,并且在大多数情况下,人们在比较两个 vector ,因此更好的主意是将
||
替换为|
,但在我的情况下,条件永远不是 vector ,但Ind2save > 1
返回一个空矩阵,有人知道为什么吗?如何满足这两个条件? 最佳答案
问题是因为在您的情况下Ind2save
为空([]
),因此条件的第一部分不能与||
一起使用,因为[] > 1
不会产生逻辑标量(它会导致[]
)。
为了解决此问题,您可以翻转条件的顺序,以便首先检查数组是否为空。
if isempty(Ind2save) || Ind2save > 1
这样做的原因是,如果
Ind2Save
为空,则第一个条件的计算结果为true
,因此使其余检查短路。如果出于某些原因
Ind2save
是 vector ,您可能还有其他问题。在这种情况下,您可能需要执行一些操作以将其转换为逻辑标量:if isempty(Ind2save) || ismember(1, Ind2save)