Change for-loop iteration inside the loop.

조회 수: 97 (최근 30일)
M G
M G 2013년 10월 10일
댓글: NALLARASU KRISH 2023년 5월 30일
Dear Matlab users,
I would like to change the For-loop iteration inside the loop if a condition is met. Suppose:
for i = 1:500
pause(0.1)
display(i)
if i == 40
i = 300;
end
end
So, I want whenever i == 40, the iteration changes from 39 to 300 and continues till 500. The code above does not work and every time the loop resets the i value. What I want should look like this:
i = 1, 2, 3, ... 39, 300, 301, 302, 303, ... 500.
  댓글 수: 1
Himanshu Nagpal
Himanshu Nagpal 2016년 6월 14일
You can use the following code
i = 1;
while (i <= 500)
pause(0.1)
display(i)
i = i + 1;
if (i == 40)
i = 300;
end
end

댓글을 달려면 로그인하십시오.

답변 (3개)

Roger Stafford
Roger Stafford 2013년 10월 10일
편집: Roger Stafford 2013년 10월 10일
Matlab's for-loop is designed so that you cannot change its index, in this case, 'i', within the loop. Even though you have set it to 300, it will stubbornly return on the next trip with i = 41, not 300. To do what you indicate here you should do this instead:
for i = [1:39,300:500]
pause, etc ...
end
If a change in indexing cannot be predicted in advance of entering a for-loop you should use the 'while-end' construct instead where you must control the index yourself instead of an automatic advance at each step. Either that or if you want to sudden depart ahead of time from a for-loop, use the 'break' function.
  댓글 수: 2
M G
M G 2013년 10월 10일
Hi Roger, Thanks for response, but what if the IF-statement varies every time?
Roger Stafford
Roger Stafford 2013년 10월 10일
See the edited version of my answer.

댓글을 달려면 로그인하십시오.


Sachin Patil
Sachin Patil 2016년 9월 20일
Please see this code
i = 1;
for j = 1:500
pause(0.1)
display(i)
i = i + 1;
if i == 40
i = 300;
end
end
  댓글 수: 2
Jose Martinez
Jose Martinez 2020년 10월 16일
TRASH
NALLARASU KRISH
NALLARASU KRISH 2023년 5월 30일
Yes! value of i goes upto 759 instaed of stopping at 500!!

댓글을 달려면 로그인하십시오.


Hector Cano
Hector Cano 2020년 2월 14일
clc;clear;close all
n=[1 1 100];
while (n(1) <= n(3))
j(n(1))=n(1);
if (n(1) == 50)
n(2) = 10;
end
n(1) = n(1) + n(2);
if (n(1)==n(3))
n(3)=200;
end
end
j(j==0)=nan;
plot(j,'*-r')

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by