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,然后我们可以跳出循环。

因此,创建一个名为 conditionslogical 数组,它执行以下操作:

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的主要内容,如果未能解决你的问题,请参考以下文章

Matlab编程语言,五条件语句

7.2.5 多层嵌套的if语句

MATLAB学习笔记——程序设计

matlab里面的for循环嵌套

python小白之路(控制语句二)

if--else 嵌套 怎么理解?