Matlab - 在嵌套的if语句中继续下一个elseif

时间:2014-12-02 04:28:26

标签: matlab if-statement nested

我有一堆嵌套'如果'彼此之间的陈述,我无法让它们以我想要的方式流动。我有一个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;
    mypoints{1,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;
    mypoints{1,k} = testpt;
    mypoints = testmypoints(mypoints, edgedouble, x1, x2, y1, y2);
    end

    etc....
end 

我想要它做的是,如果uni == 0,继续执行elseif(condition2)(等等),但目前它只是停止。我尝试在每个嵌入式&#39; if&#39;之后添加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, mypoints{1,w});
if myt == 1;
uni = 0;
break
else
uni = 1;
end
end

当条件得到满足并且是唯一的时,所有这些都有效,但它不起作用,只有在满足条件但没有唯一性时才会停止。

谢谢!

1 个答案:

答案 0 :(得分:3)

我建议您将所有布尔条件作为单个元素放入logical数组,以及另一个数组中的所有可能测试点。之后,迭代在您的所有条件下使用相应的测试点,并使用testmypoints脚本检查uni = 1uni = 0。我们基本上会继续迭代您的所有条件和相应的测试点直到 uni = 1,然后我们就可以突破循环。

因此,创建一个名为logical的{​​{1}}数组,它可以执行以下操作:

conditions

将要检查的每个条件放在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; ... ...]; 将是一个2D数组,其中每一行都包含一个测试点,该测试点匹配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; mypoints{1,k} = testpt; mypoints = testmypoints(mypoints, edgedouble, x1, x2, y1, y2); break; end end end 。如果是,那么让我们获得与该位置对应的相应测试点,然后检查true。应该myuniquetest,然后我们将运行uni == 1时发生的代码(说实话,我不明白你在这里做什么,但如果你说它有效......那么好吧! )。一旦发生这种情况,我们就会突破循环并记录您的结果。如果uni == 1,那么我们的条件不满意,所以我们应该继续检查其他条件。


希望这有帮助!