Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 空的if语句_Matlab_Loops_If Statement - Fatal编程技术网

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语句下面,并且应该始终运行此代码。如果我想强调我想进入下一个迭代,我会继续。如果代码很复杂,那么跳过不是最好的方法。最好将代码划分为函数。这将使每个功能更短,更易于概述。良好的命名将使用户能够阅读代码,而无需深入研究每个子功能。