Why does this while loop acts like an infinite loop

Il am trying to change the elements of m to 0 when they reach a value superior to 10. The sequence is suppose to stop when all the elements equal 0 but it seem to act like an infinite loop when it should take less than 10 iterations to solve and I don't know why. What is the problem and how can I solve it?
clear;clc
m=[1,2,3,4,5];
l=length(m);
z=0;
while l~=z
m=m*1.5;
a=find(m>=10);
la=length(a);
if la>0
m(a)=0;
end
z=la;
end
a=m

 采纳的回答

Once you start replacing some of the m(i) with zeros, those m(i) remain zero and can never again reach a value of 10. Therefore z=sum(m>=10) can never reach l=length(m). You really want something like this,
while any(m)
m=m*1.5;
m(m>=10)=0;
end

更多回答(1 个)

Put a break point on the first line and then step through. You can out a breakpoint by clicking on the dash next to the while. Then click step to walk through each line investigating what each variable is at any point.

类别

在 帮助中心 和 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!

Translated by