063flag的妙用

如何跳出两层循环呢,比如我要遍历矩阵a,并将其中的值赋予矩阵b。为了便于演示通过a的每一行进行赋值,如下:

clear
clc

a = [1,1,1,1,1;
    1,1,1,1,1;
    1,1,0,1,1;
    1,1,1,1,1;
    1,0,1,1,1;];
[m, n] = size(a);
for i = 1:m
    b(i,:) = a(i,:);
end

如果a的某一行中有0,这一行就不对b进行赋值。那么就要考虑对a的每一行的每个元素进行判断,如果元素为0,那就跳过赋值,遍历a的下一行。这样就相当于需要跳出判断数组a的某一行是否为0的循环,并且继续进行遍历a的每一行的循环,break & continue
为了进一步说明,举一个反例,比如下面:

clear
clc

a = [1,1,1,1,1;
    1,1,1,1,1;
    1,1,0,1,1;
    1,1,1,1,1;
    1,0,1,1,1;];
[m, n] = size(a);
for i = 1:m
    for j = 1:n
        if a(i,j) == 0
            break;
        end
    end
    b(i,:) = a(i,:);
end

如果if判断之后直接break,那只能跳出第二层for循环,还是会执行下面的赋值操作。下面给出一个flag解决这个问题:

clear
clc

a = [1,1,1,1,1;
    1,1,1,1,2;
    1,1,0,1,3;
    1,1,1,1,4;
    1,0,1,1,5;];
[m, n] = size(a);
k = 1;
for i = 1:m
    flag = 0;
    
    for j = 1:n
        if a(i,j) == 0
            flag = 1;
            break;
        end
    end
    
    if flag == 1
        continue;
    end
    
    b(k,:) = a(i,:);
    k = k + 1;
end

有了这个技巧,可以随意设置循环执行条件了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值