Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中中断for循环_Matlab_Loops_Break - Fatal编程技术网

在matlab中中断for循环

在matlab中中断for循环,matlab,loops,break,Matlab,Loops,Break,我已经写了一个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

我已经写了一个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
只退出内部循环(使用
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 

由于
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 

看起来您希望查找矩阵中的第一个
1
值,按行的主要顺序进行搜索(先增加列索引,然后增加行索引)。您可以使用以下函数在不使用循环的情况下执行此操作:

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

看起来您希望查找矩阵中的第一个
1
值,按行的主要顺序进行搜索(先增加列索引,然后增加行索引)。您可以使用以下函数在不使用循环的情况下执行此操作:

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

中断
退出的内部
,但不退出外部。无论如何,这可能不需要循环就可以完成。请用示例输入和输出描述您想要实现的目标将此代码放入一个适当命名的函数中,并返回
而不是
break
ing,因为正如@LuisMendo所说,
break
退出内部
for
,不是两个。您还可以在
if
语句中手动设置
i=n
j=m
,以确保两个循环都终止
break
仅终止内部循环。
break
退出内部
for
,但不退出外部
。无论如何,这可能不需要循环就可以完成。请用示例输入和输出描述您想要实现的目标将此代码放入一个适当命名的函数中,并返回
而不是
break
ing,因为正如@LuisMendo所说,
break
退出内部
for
,不是两个。您还可以在
if
语句中手动设置
i=n
j=m
,以确保两个循环都终止<代码>中断
仅终止内部循环。