【问题标题】:break the for loops in matlab打破matlab中的for循环
【发布时间】:2016-03-01 16:38:45
【问题描述】:

我写了一个 matlab 代码,想在找到矩阵中的第一个代码后终止代码。但是,它一直持续到最后一个,然后中断工作。问题是什么?

% The code is as follows:
     for i=1:n
        for j=1:m
            if (bw(i,j)==1)  % element with value one  
                p1(1)=i;p1(2)=j;
                % fprintf('value of a: %d\n', i ,j)
                sprintf('Found first one in the loop!!')
                break;    % terminate 
            end
        end
    end   

【问题讨论】:

  • break 退出内部 for,但不退出外部。无论如何,这可能可以在没有循环的情况下完成。请描述您想要实现的目标,例如输入和输出
  • 将此代码放在一个适当命名的函数中,并使用return 而不是breaking,因为就像@LuisMendo 所说,break 退出了内部for,而不是两者。
  • 您还可以在if 语句中手动设置i = nj = m,以确保两个循环都终止。 break 只杀死内部循环。

标签: matlab loops break


【解决方案1】:

您似乎想要在矩阵中找到第一个1,以行优先顺序 进行搜索(先增加列索引,然后增加行索引) .您可以使用 find 函数在没有循环的情况下执行此操作:

M = [0 1; 1 1]; %// example matrix
v = 1; %// value you want to find
[col, row] = find(M.'==v, 1);

注意矩阵是转置的,find 的两个输出的顺序是颠倒的。这是因为 Matlab 以列优先顺序查找元素(首先增加行索引,然后增加列索引)。

在上面的例子中,用

M =
     0     1
     1     1

结果是

row =
     1
col =
     2

【讨论】:

    【解决方案2】:

    由于break 只退出内循环(与j 一起运行的循环)而不是外循环(与i 一起运行的循环),您可以使用一个简单的布尔值来解决问题初始设置为false
    当您中断内部循环时,将其更改为true,然后检查(在外部循环中)此类布尔值是否为true。如果是,也打破外循环。

    IWantToBreak=false;
    for i=1:n
        for j=1:m
            if (bw(i,j)==1)  % element with value one  
                p1(1)=i;p1(2)=j;
                % fprintf('value of a: %d\n', i ,j)
                sprintf('Found first one in the loop!!')
                IWantToBreak=true;
                break;    % terminate 
            end
        end
        if IWantToBreak==true
            break;
        end
    end 
    

    【讨论】:

      猜你喜欢
      • 2011-05-30
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多