在matlab中中断for循环
我已经写了一个matlab代码,希望在找到矩阵中的第一个后终止代码。但是,它一直持续到最后一个,然后中断工作。有什么问题在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
% 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
,以确保两个循环都终止<代码>中断
仅终止内部循环。