我有这个设置:
for i=1:10
if (condition1)
elseif (condition2)
(do something)
else
(do something)
end
end
对于condition1
,如果条件满足,我不希望发生任何事情,我只想再次使用下一个值i
运行循环。我该怎么做?我可以在if
声明下面留空,还是有更优雅的方法来做到这一点?如果我删除第一个if
语句,如果没有满足其他条件,循环期间会发生什么?
如果可能的话,我想避免运行第一个if
语句,因为我的问题是复杂程度最高。我必须检查condition1
,因为如果符合,那么我想转到i
的下一个值。我希望这个问题有道理。
答案 0 :(得分:3)
你想使用continue
语句,这会跳过循环的当前迭代:
for i=1:10
if (condition)
continue;
elseif (condition)
(do something)
else
(do something)
end
end
请参阅:http://www.tutorialspoint.com/matlab/matlab_continue_statement.htm
答案 1 :(得分:1)
ialquaz的答案是正确的(在我看来),所以不需要详细说明。相反,我会回答你的第二个问题:
如果我删除第一个if语句,循环期间会发生什么 如果没有满足其他条件?
这取决于你的条件,但一般来说,是的!
这是因为最后else
捕获了所有其他条件都不满足的情况。例如,假设您有以下循环:
n = 9;
x = zeros(1,n);
for ii = 1:n
if ii < 3
continue;
elseif ii > 5
x(ii) = 4;
else
x(ii) = 6;
end
end
x =
0 0 6 6 6 4 4 4 4
正如您所看到的,continue
语句在开始时使循环跳过最后elseif
和else
。这意味着不会触及前2个元素。在elseif ii > 5
设置为ii == 6
后,4
会导致所有元素更高。当ii >= 3 & ii <= 5
else
将捕获剩余的案例时,这些元素将为6
。现在,让我们看看如果我们跳过第一个if
:
n = 9;
x = zeros(1,n);
for ii = 1:n
if ii > 5
x(ii) = 4;
else
x(ii) = 6;
end
end
x =
6 6 6 6 6 4 4 4 4
前三个元素不再被第一个if
语句所涵盖,因此被else
捕获。
答案 2 :(得分:0)
如果您想condition2
如果condition1
为真,请跳过for i = 1:10
if ~(condition1)
if (condition2)
(do something)
else
(do something)
end
end
end
,只需提出相反的要求:
~
true
(&#34; not&#34;)会将false
转为else
,反之亦然。由于只有condition2
为condition1
时才要执行false
order_by
之前和之后的两个语句块,因此必须在每次迭代中明确检查它。
答案 3 :(得分:0)
for i=1:10
if (condition) && ~(condition1)
(do something)
elseif ~(condition1)
(do something)
end
end
您也可以通过以上方式完成
答案 4 :(得分:0)
如果条件1恰好是真的并且如果是真的那么&#39;你不想做任何事情,你在代码中不需要这样做。所以我会选择这样的事情:
for i=1:10
//commenting 'if' for condition1 since you wouldn't need it
//if (condition1)
if (condition2)
(do something)
else
(do something)
end
end