Matlab - 在嵌套的 if 语句中继续下一个 elseif
Posted
技术标签:
【中文标题】Matlab - 在嵌套的 if 语句中继续下一个 elseif【英文标题】:Matlab - Continue to next elseif in nested if statements 【发布时间】:2014-12-02 04:28:26 【问题描述】:我有一堆嵌套的“if”语句,我无法让它们按照我想要的方式流动。我有一个 if 语句,如果满足,我运行一个唯一性测试 (myuniquetest),如果这表明我的条件给出了一个唯一的结果,我想记录它并继续。我已经弄清楚了那部分但是,如果第一个条件没有给出唯一的结果,我想继续其余的 elseif 语句,看看后续的语句是否给出了唯一的结果。 (我在这段代码中总共有 8 个 elseif 语句,但我想我会使用相同的方法。)我的代码看起来像这样:
if edgedouble(y0-1, x0) == 1 && (y0-1)>=y1 && (y0-1)<=y2;
testpt = [y0-1, x0];
uni = myuniquetest(testpt, mypoints);
if uni ==1;
k = k+1;
mypoints1,k = testpt;
mypoints = testmypoints(mypoints, edgedouble, x1, x2, y1, y2);
end
elseif edgedouble(y0-1, x0+1) ==1 && (y0-1)>=y1 && (y0-1)<=y2 && ...
(x0+1)>=x1 && (x0+1)<=x2;
testpt = [y0-1, x0+1];
uni = myuniquetest(testpt, mypoints);
if uni ==1;
k = k+1;
mypoints1,k = testpt;
mypoints = testmypoints(mypoints, edgedouble, x1, x2, y1, y2);
end
etc....
end
我想要它做的是,如果 uni==0,继续到 elseif(condition2)(等等),但目前它只是停止。我尝试在每个嵌入的“if”语句之后添加一个 while 语句,所以它们看起来像这样:
if uni ==1;
(log my values, move on)
end
while uni==0
continue
end
但是,它使我的其余代码崩溃,随后 Matlab 崩溃。有没有更简单的方法来做到这一点?
唯一性函数代码如下:
function[uni] = myuniquetest(testpoint, mypoints)
mysize = size(mypoints);
for w = 1:mysize(2);
myt = isequal(testpoint, mypoints1,w);
if myt == 1;
uni = 0;
break
else
uni = 1;
end
end
所有这些都在满足条件且唯一性时起作用,但它不起作用并且在满足条件但不唯一性时停止。
谢谢!!
【问题讨论】:
可以显示 condition1 的样子吗?这样的例子就可以了。 我做到了,谢谢!我现在遇到了“开关”功能的问题! 【参考方案1】:我建议您将所有布尔条件作为单个元素放入 logical
数组中,以及将所有可能的测试点放入另一个数组中。之后,迭代所有条件及其对应的测试点,并使用testmypoints
脚本检查是uni = 1
还是uni = 0
。我们基本上会不断迭代您的所有条件和相应的测试点直到 uni = 1
,然后我们可以跳出循环。
因此,创建一个名为 conditions
的 logical
数组,它执行以下操作:
conditions = [edgedouble(y0-1, x0) == 1 && (y0-1)>=y1 && (y0-1)<=y2;
edgedouble(y0-1, x0+1) ==1 && (y0-1)>=y1 && (y0-1)<=y2 && (x0+1)>=x1 && (x0+1)<=x2;
...
...];
将您要检查的每个条件放在logical
数组中。接下来,将每个条件的相应测试点放在另一个数组中。让我们称之为testpoints
:
testpoints = [y0-1 x0;
y0-1 x0-1;
...
...];
testpoints
将是一个二维数组,其中每一行包含一个测试点,该测试点与conditions
中相应位置的条件匹配。现在,您所要做的就是遍历每个条件和对应点,直到我们点击uni = 1
。如果uni = 0
,则继续循环并检查其他条件,直到uni = 1
,或者如果我们用完了要检查的条件,则此循环将结束,您将不会记录任何结果。
事不宜迟:
for idx = 1 : numel(conditions)
if conditions(idx)
testpt = testpoints(idx,:);
uni = myuniquetest(testpt, mypoints);
if uni == 1
k = k + 1;
mypoints1,k = testpt;
mypoints = testmypoints(mypoints, edgedouble, x1, x2, y1, y2);
break;
end
end
end
让我们慢慢看一下这段代码,首先,我们检查一个特定的条件是否是true
。如果是,那么让我们获取与该位置对应的相应测试点,然后与您的myuniquetest
核对。如果uni == 1
,那么我们将运行uni == 1
时发生的代码(老实说,我不明白你在这里做什么,但如果你说它可以工作......那么好吧!)。一旦发生这种情况,我们就会跳出循环并记录您的结果。如果uni == 0
,那么我们的条件不满足,所以我们应该继续检查其他条件。
希望这会有所帮助!
【讨论】:
@Marissa - 我的荣幸 :) 祝你好运!以上是关于Matlab - 在嵌套的 if 语句中继续下一个 elseif的主要内容,如果未能解决你的问题,请参考以下文章