Matlab 空的if语句
我已建立了以下设置:Matlab 空的if语句,matlab,loops,if-statement,Matlab,Loops,If Statement,我已建立了以下设置: for i=1:10 if (condition1) elseif (condition2) (do something) else (do something) end end 对于条件1,如果条件满足,我不想发生任何事情,我只想使用下一个值I再次运行循环。我该怎么办?我可以在if语句下面把它留空吗,或者有没有更优雅的方法?如果删除第一个If语句,如果其他条件都不满足,循环期间会发生什么 如果可能的话,我
for i=1:10
if (condition1)
elseif (condition2)
(do something)
else
(do something)
end
end
对于条件1,如果条件满足,我不想发生任何事情,我只想使用下一个值I再次运行循环。我该怎么办?我可以在if语句下面把它留空吗,或者有没有更优雅的方法?如果删除第一个If语句,如果其他条件都不满足,循环期间会发生什么
如果可能的话,我希望避免运行第一个If语句,因为对于我的问题,它具有最高的复杂性。我必须检查条件1,因为如果满足条件1,那么我希望转到下一个值I。我希望这个问题有意义。如果条件1为真,您想跳过条件2,只需问相反的问题:
for i = 1:10
if ~(condition1)
if (condition2)
(do something)
else
(do something)
end
end
end
~not将由真变假,反之亦然。因为只有当条件1为false时,您才希望在条件2的else之前和之后执行这两个语句块,所以您必须在每次迭代中明确检查它。如果要在条件1为true时跳过条件2,只需询问相反的问题:
for i = 1:10
if ~(condition1)
if (condition2)
(do something)
else
(do something)
end
end
end
~not将由真变假,反之亦然。因为只有当条件1为false时,您才希望在条件2的else之前和之后执行这两个语句块,所以您必须在每次迭代中明确检查它。如果要使用continue语句,这将跳过循环的当前迭代:
for i=1:10
if (condition)
continue;
elseif (condition)
(do something)
else
(do something)
end
end
请参阅:如果要使用continue语句,这将跳过循环的当前迭代:
for i=1:10
if (condition)
continue;
elseif (condition)
(do something)
else
(do something)
end
end
见:
你也可以用上面的方法来做
你也可以用上面的方法来做我认为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
前三个元素不再包含在第一个if语句中,因此由else捕获 在我看来,来自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
前三个元素不再包含在第一个if语句中,因此由else捕获 如果条件1恰好为true,并且如果“true”您不想做任何事情,那么代码中就不需要这样做。因此,我将采用如下方式:
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
如果条件1恰好为true,并且如果“true”您不想做任何事情,那么代码中不需要这样做。因此,我将采用如下方式:
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
我尝试了这个,然后重新运行程序,由于某种原因,我的输出完全改变了。问题是,如果满足第一个if语句,我不想继续当前循环,我想转到I的下一个值。但是,当我删除它并且条件2不满足时,它会在“else”下进行计算,这是我不想要的。@EBH使用if~cond1&&cond2 elseif~cond1 end如何?@Crowley显然,要做到这一点,有很多种方法,OP必须决定什么是他最容易阅读的。但是,如果cond2很复杂。@EBH或cond1很复杂,则您的建议可能效率较低。但是如果它很复杂,你应该把它放在一个单独的变量中,并给它一个有意义的全名。这提高了可读性。@Bernhard我不是OP,所以我不知道这个条件有什么意义。当我说对执行时间进行复杂调整时,如果检查条件2需要很多时间,那么将其放在条件1中可以消除不必要的检查。我尝试了这一点,然后重新运行程序,由于某种原因,我的输出完全变了。问题是,如果满足第一个if语句,我不想继续当前循环,我想转到I的下一个值。但是,当我删除它并且条件2不满足时,它会在“else”下进行计算,这是我不想要的。@EBH使用if~cond1&&cond2 elseif~cond1 end如何?@Crowley显然,要做到这一点,有很多种方法,OP必须决定什么是他最容易阅读的。但是,如果cond2很复杂。@EBH或cond1很复杂,则您的建议可能效率较低。但是如果它很复杂,你应该把它放在一个单独的变量中,并给它一个有意义的全名。这提高了可读性。@Bernhard我不是OP,所以我不知道这个条件有什么意义。当我说执行时间有多复杂的时候
检查条件2需要很多时间,然后将其放在条件1中可以消除不必要的检查。只有在if构造的end语句之后的循环中执行了其他操作时,添加continue才相关,您不希望执行的。可能值得注意的是,continue将跳过最内层循环中的其余代码,并直接转到此迭代的结尾。添加continue仅当在if构造的end语句之后的循环中执行了其他操作时才相关,您不希望执行的。可能值得注意的是,continue将跳过最内层循环中的其余代码,并直接转到此迭代的结尾。这将不起作用,因为只要~condition=false,就会执行else后面的语句。@EBH,感谢您指出这一点。我编辑了它,希望现在可以了。elif应该是elseif,而且这里没有优化,每次迭代都会检查condition1和condition2。这不起作用,因为只要~condition=false,就会执行else后面的语句。@EBH,感谢您指出这一点。我编辑了它,希望它现在应该可以了。elif应该是elseif,而且这里没有优化,每次迭代都会检查条件1和条件2。我认为保留一个空的if是很好的。我会在里面添加一条注释,解释在这种情况下什么都不需要做,所以当你在一段时间后回到代码时,你不会奇怪为什么会有一个空的if。Stewie Griffin回答解释了为什么删除第一个条件是不好的,它会导致不想要的行为。我想说的是,留下一行空白或更好的评论是非常好的。我个人喜欢这样的方法,即一行空白,只有一条评论说什么也没做。这只适用于循环中有更多代码的情况,在if语句下面,并且应该始终运行此代码。如果我想强调我想进入下一个迭代,我会继续。如果代码很复杂,那么跳过不是最好的方法。最好将代码划分为函数。这将使每个功能更短,更易于概述。好的命名将使用户能够阅读代码而不必深入到每个子函数中。我认为保留一个空的if是非常好的。我会在里面添加一条注释,解释在这种情况下什么都不需要做,所以当你在一段时间后回到代码时,你不会奇怪为什么会有一个空的if。Stewie Griffin回答解释了为什么删除第一个条件是不好的,它会导致不想要的行为。我想说的是,留下一行空白或更好的评论是非常好的。我个人喜欢这样的方法,即一行空白,只有一条评论说什么也没做。这只适用于循环中有更多代码的情况,在if语句下面,并且应该始终运行此代码。如果我想强调我想进入下一个迭代,我会继续。如果代码很复杂,那么跳过不是最好的方法。最好将代码划分为函数。这将使每个功能更短,更易于概述。良好的命名将使用户能够阅读代码,而无需深入研究每个子功能。