MATLAB要退出多重for循环,怎么做?

DM648
TMS320DM648 2012-12-18 字数 447

比如:

for i=1:5

for j=i:5

for k=i:5

if i+j+k==10

disp('找到答案了');

str= sprintf('%d+%d+%d=10',i,j,k);

disp(str);

break;

break;

break;

end

end

end

end

如果只想找出一个答案,那么找到答案后如果退出所有循环?

多个break MATLAB提示错误,运行起来也不起作用,只有最内一个循环退出了。那外面两个循环怎么退出啊?

多谢了

MathTools 数学工具
41 个回复
miaomiaocat
猫妖 2012-12-18

matlab里为啥要用多重for循环啊……

【 在 DM648 (TMS320DM648) 的大作中提到: 】

: 比如:

: for i=1:5

:     for j=i:5

: ...................

DM648
TMS320DM648 2012-12-18

那用啥?

【 在 miaomiaocat (猫妖) 的大作中提到: 】

: matlab里为啥要用多重for循环啊……

gaofei
高飞 2012-12-18

多个break,多有创意的写法

不知道matlab支持goto不,

另一种写法,if里面,i=5;j=5;k=5

【 在 DM648 (TMS320DM648) 的大作中提到: 】

: 标  题: MATLAB要退出多重for循环,怎么做?

: 发信站: 水木社区 (Tue Dec 18 16:38:15 2012), 站内

: 比如:

: for i=1:5

:     for j=i:5

:         for k=i:5

:             if i+j+k==10

:                 disp('找到答案了');

:                 str= sprintf('%d+%d+%d=10',i,j,k);

:                 disp(str);

:                 break;

:                 break;

:                 break;

:             end

:         end

:     end

: end

: 如果只想找出一个答案,那么找到答案后如果退出所有循环?

: 多个break MATLAB提示错误,运行起来也不起作用,只有最内一个循环退出了。那外面两个循环怎么退出啊?

: 多谢了

: --

miaomiaocat
猫妖 2012-12-18

想办法转成矩阵的运算吧

matlab里的for循环是效率最低的一部分,尽量别嵌套,实在要嵌套两层就够了……

【 在 DM648 (TMS320DM648) 的大作中提到: 】

: 那用啥?

DM648
TMS320DM648 2012-12-18

用MATALB还讲效率不就是个JOKE吗?

【 在 miaomiaocat (猫妖) 的大作中提到: 】

: 想办法转成矩阵的运算吧

: matlab里的for循环是效率最低的一部分,尽量别嵌套,实在要嵌套两层就够了……

miaomiaocat
猫妖 2012-12-18

为啥不讲呢?就算它慢吧,本来1个小时能跑完的东西,非得让跑两天才完合算吗

【 在 DM648 (TMS320DM648) 的大作中提到: 】

: 用MATALB还讲效率不就是个JOKE吗?

SHENOK
石室食士 2012-12-18

我给你优化一下:

disp('找到答案了');

disp('1+4+5=10');

【 在 DM648 (TMS320DM648) 的大作中提到: 】

: 比如:

: for i=1:5

:     for j=i:5

: ...................

Fermat
Fermat 2012-12-18

放进一个函数里面,然后用 return

你那算法太差,问题规模再大一些就会跑不动。

【 在 DM648 (TMS320DM648) 的大作中提到: 】

: 比如:

: for i=1:5

:     for j=i:5

: ...................

Insomnia
完美主义是种病 2012-12-18

nice

【 在 SHENOK (石室食士) 的大作中提到: 】

: 我给你优化一下:

:   disp('找到答案了');

:   disp('1+4+5=10');

Fermat
Fermat 2012-12-18

总时间不长,怎么来都成。

总时间受不了,混编,并行,通通得上。当然,算法改进更重要。

讲不讲效率与语言没关系

你这说法才是大 joke

【 在 DM648 (TMS320DM648) 的大作中提到: 】

: 用MATALB还讲效率不就是个JOKE吗?

Hakkk
蓝猫淘气3k问·荷兰篇 2012-12-18

要么就逐层break

哪有最里面break这么多次的搞法

【 在 DM648 (TMS320DM648) 的大作中提到: 】

: 比如:

: for i=1:5

:     for j=i:5

: ...................

Fermat
Fermat 2012-12-18

谁说没有?break 后面加数字或者标签一下退出多个循环的语言你没见过不代表没有。

【 在 Hakkk (蓝猫淘气3k问·荷兰篇) 的大作中提到: 】

: 要么就逐层break

: 哪有最里面break这么多次的搞法

Hakkk
蓝猫淘气3k问·荷兰篇 2012-12-19

在说matlab……

【 在 Fermat (Fermat) 的大作中提到: 】

: 谁说没有?break 后面加数字或者标签一下退出多个循环的语言你没见过不代表没有。

SHENOK
石室食士 2012-12-19

这不说matlab吗?

而且,标签break也不是这么连写三个来退出三层啊?

“最里面break这么多次的搞法”好像真没有吧?

【 在 Fermat (Fermat) 的大作中提到: 】

: 标  题: Re: MATLAB要退出多重for循环,怎么做?

: 发信站: 水木社区 (Wed Dec 19 00:01:30 2012), 站内

: 谁说没有?break 后面加数字或者标签一下退出多个循环的语言你没见过不代表没有。

: 【 在 Hakkk (蓝猫淘气3k问·荷兰篇) 的大作中提到: 】

: : 要么就逐层break

: : 哪有最里面break这么多次的搞法

: --

yuhan1986
雨涵1986 2012-12-19

你个break就够了,然后可以输出结果,楼主要是说以取1+4+5,直接用return就好了。

Zhangfang
方文 2012-12-19

感觉lz的想法挺诡异的,会有更好的程序优化方法,这种写法挺烂的,

如果非要用类似逻辑,建议用while嵌套,类似这样,while(10>i && TRUE == bWorking )

【 在 DM648 的大作中提到: 】

: 比如:

: for i=1:5

:     for j=i:5

: ...................

wakeupbuddy
ALLELUJAH! DON'T BEND! ASCEND! 2012-12-19

加个bool flag

mede
秋膘防冬冻 2012-12-19

a=0;

a=1;

if a==1, break; end

if a==1, break; end

【 在 DM648 (TMS320DM648) 的大作中提到: 】

: 标  题: MATLAB要退出多重for循环,怎么做?

: 发信站: 水木社区 (Tue Dec 18 16:38:15 2012), 站内

: 比如:

: for i=1:5

:     for j=i:5

:         for k=i:5

:             if i+j+k==10

:                 disp('找到答案了');

:                 str= sprintf('%d+%d+%d=10',i,j,k);

:                 disp(str);

:                 break;

:             end

:         end

:     end

: end

: 如果只想找出一个答案,那么找到答案后如果退出所有循环?

: 多个break MATLAB提示错误,运行起来也不起作用,只有最内一个循环退出了。那外面两个循环怎么退出啊?

: 多谢了

: --

Fermat
Fermat 2012-12-19

好吧,明确说一下,我是表达对于怀疑“一次break退出多个循环合理性的的反对。

因为语言的限制,不能正常表示这一类很直观的逻辑,还挺批评别人“你这想法就不对”。这种调调我一直很反对。

【 在 SHENOK (石室食士) 的大作中提到: 】

: 这不说matlab吗?

: 而且,标签break也不是这么连写三个来退出三层啊?

: “最里面break这么多次的搞法”好像真没有吧?

: ...................