An equivalent to jump/goto ?
85 ビュー (過去 30 日間)
古いコメントを表示
Hello all,
I would like to jump between my loops whole/for. I know that I can use the command break, but it doesn't work in this situation.
There is the architecture of my code :
while (condition1)
Action1
while (Condition2)
Action2
for i=1:N
if (Condition3)
Action3
%Goto second While loop
elseif (Condition4)
Action4
%Goto first While loop
end
end
end
end
Is it possible to do these 'Goto' with Matlab ? or an equivalent ?
Thanks.
3 件のコメント
Walter Roberson
2018 年 1 月 7 日
Mauro Alejandro Pereira comments to Loginatorist:
This is not a solution.
Walter Roberson
2018 年 1 月 7 日
Mauro Alejandro Pereira:
Notice that Loginatorist's remark was posted as a Comment, not as an Answer. Individual Comments are for discussion, and need not be solutions.
採用された回答
Sean de Wolski
2012 年 10 月 26 日
The MATLAB equivalent is to use functions that you call when you want to go somewhere else.
This is explained in the documentation for function, available here:
0 件のコメント
その他の回答 (3 件)
Jan
2012 年 10 月 26 日
編集済み: Jan
2012 年 10 月 26 日
Only a small change solves the problem:
while (condition1)
Action1
Proceed = true;
while (Condition2 && Proceed)
Action2
for i=1:N
if (Condition3)
Action3
%Goto second While loop
break; % <==
elseif (Condition4)
Action4
%Goto first While loop
Proceed = false; % <==
break; % <==
end
end
end
end
This is very similar to Matt Fig's solution, only the test of his bf is embedded in the condition of the WHILE.
1 件のコメント
Matt Fig
2012 年 10 月 26 日
編集済み: Matt Fig
2012 年 10 月 26 日
Yep. I use this similar construct too. Which one I choose depends on what I am doing. When translating old FORTRAN code, or when I am working with a FORTRAN programmer, (both occur frequently in my line of work) I am more likely to use my approach. When writing from scratch I am likely to use the one Jan shows.
Matt Fig
2012 年 10 月 26 日
編集済み: Matt Fig
2012 年 10 月 26 日
There has been a feature request for quite some time to allow BREAK to have a level passed to it. Perhaps add your name to the chorus of voices requesting such a feature. Until then, use this kind of thing....
cnt1 = 1;
cnt2 = 1;
while cnt1<10
disp('In first loop')
bf = 0; % Break flag for throwing back to first loop
cnt1 = cnt1 + 1;
while cnt2<10
disp('In second loop')
cnt2 = cnt2 + 1;
for i=1:20
if cnt2<5
cnt2 = cnt2 + 1;
disp('breaking back to 2nd loop')
break
%Goto second While loop
elseif cnt1<5
disp('breaking back to 1st loop')
cnt1 = cnt1 + 1;
bf = 1; % set flag to go to first loop
break
end
end
if bf % break out of second loop when set
break
end
end
end
0 件のコメント
Walter Roberson
2012 年 10 月 26 日
2 件のコメント
Jan
2012 年 10 月 27 日
As usual I cannot hesitate to publish my hopes, that Matlab will get a COMEFROM in the future also.
Walter Roberson
2012 年 10 月 27 日
As long as it isn't ALTER! Single worst programming feature I've ever seen!
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!