how i can perform this for loop

조회 수: 1 (최근 30일)
Tammun filistin
Tammun filistin 2018년 6월 22일
편집: Tammun filistin 2018년 6월 22일
Hello im trying to perform this cod 20 times but the for loop moves one time"j=1 instead of 20" could anyone please help me to solve it!
clear all
close all
clc
for j=1:20
c=[1 2 3 5 6 7 8 99 9 3 4 55 66 7 8 9 9 97 0 1 2 ];
for k=1:length(c)
if c(k)>=5
ag(k)=1
k1=k
return
elseif c(k)<=-1
ag(k)=0
k1=k;
return
else
end
end
m=k1
l(j)=sum(ag)
end
j
  댓글 수: 2
Stephen23
Stephen23 2018년 6월 22일
"Hello im trying to perform this cod 20 times but the for loop moves one time j=1 instead of 20"
Because that is exactly what you wrote your code to do. On the first loop iteration, where j=1, it reaches the inner loop. The inner loop iterates four times until the first if condition is true (because c(4)==5) upon which you call return. The end.
The return help describes clearly that it returns to the calling function or the command window. And your code clearly run the inner loop until k=4 and so the first condition is true and so you call return, which ends the evaluation of your code. That is what you wrote the code to do, so that is what it does.
Hint: instead of guessing what MATLAB functions and commands do, read their help and try their examples.
Tammun filistin
Tammun filistin 2018년 6월 22일
편집: Tammun filistin 2018년 6월 22일
actually my victor c contain random value in each j round and I need the inner loop to check the value that satisfy the if condition in each round.. (Im looking for l(j)=sum(ag)). the resulting l vector will give different value when c vector is changing

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

채택된 답변

Pieter Hamming
Pieter Hamming 2018년 6월 22일
Replace "return" by "continue". "Return" stops the whole file, "continue" sends it on to the next iteration in the for loop.
  댓글 수: 1
Tammun filistin
Tammun filistin 2018년 6월 22일
편집: Tammun filistin 2018년 6월 22일
My c vector is changing in every j round and my aim is to see when if condition is satisfied (I mean in each j round I need to find the l(j)=sum(ag) sum(ag) which is changing by changing the vector c).
Thank you

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

추가 답변 (1개)

Meade
Meade 2018년 6월 22일
You're using the return function.
This exits out of the j loop. Try instead replacing return with continue. I'm able to get j to iterate to 20 with that small change.
Best, Meade
clear all
close all
clc
for j=1:20
c=[1 2 3 5 6 7 8 99 9 3 4 55 66 7 8 9 9 97 0 1 2 ];
for k=1:length(c)
if c(k)>=5
ag(k)=1
k1=k
continue
elseif c(k)<=-1
ag(k)=0
k1=k;
continue
else
end
end
m=k1
l(j)=sum(ag)
end
j
%% 20th iter
ag =
0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1
k1 =
18
m =
18
l =
13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
j =
20
  댓글 수: 1
Tammun filistin
Tammun filistin 2018년 6월 22일
편집: Tammun filistin 2018년 6월 22일
Dear sir Is theirs away to stop the the inner for loop (with counter k) when it satisfy the if condition then repeat the outer loop j times. If the c vector is changing in every j round the sum(ag) will change and this is my aim(Im traing to fined l(j)=sum(ag) when c is changing in every j round).
Thank you

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

카테고리

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