I see that i can use the break comand, but don't think that is the best choise here anyother options out there??
this should be easy I have a while loop that is infinite
5 次查看(过去 30 天)
显示 更早的评论
When I run this it is inifinite and well that's not what i am looking for... i thought that by limiting the x value to 99 which is in the vector i could get it to stop but that's not the case. any ideas i know that it is going to be something simple...
clc, clear all, close all;
x = 1;
while x <= 99
x = 1:2:100
end
采纳的回答
Matt Fig
2012-9-13
In MATLAB, conditionals evaluate to true if ALL values of the conditional are non-zero or true. You are repeatedly creating a vector x inside the loop which has all of its values equal to or less than 99, so the conditional will evaluate to true every time. This is why you are getting an infinite loop.
Here is an example, using an IF statement. It evaluates the same way the WHILE loop does:
v = [1 2 -9]; % Notice ALL values are non-zero
if v, disp('IN IF 1'),end
v = [1 0 -9]; % Not all values are non-zero.
if v, disp('IN IF 2'),end
When you do a comparison (>,<,==, etc), you get a logical result. If you do a comparison on an array, you get a logical vector the same size as the array. This will go through a conditional expression the same as v did above: any false (0) values and the expression will not pass the statement.
v>-20 % This will pass [1 1 1]
v<0 % Will not pass, [0 0 1]
What are you trying to achieve with your loop?
5 个评论
Matt Fig
2012-9-13
编辑:Matt Fig
2012-9-13
I see. There are several ways to do that.
x = [];
n = 1;
while n<=100
x = [x n];
n = n + 2;
end
Another:
x = zeros(1,ceil(99/2)); % Not strictly necessary.
n = 1;
while n<=ceil(99/2)
x(n) = 2*n-1;
n = n + 1;
end
You could also be a smart alec:
T = true;
while T
x = 1:2:100;
T = false;
end
更多回答(4 个)
Wayne King
2012-9-13
编辑:Wayne King
2012-9-13
Why do you need a while loop here? If you just want a vector running from 1 to 99 in increments of 2, the following does the job.
x = 1:2:100;
With the previous statement you are creating a vector whose last element is 99 and since you don't increment that vector inside the while loop, you never exceed your terminating condition.
note the difference between that and
x = 1;
while x<= 99
x = x+1;
end
x
You see with the above, that when you exit the while loop, x is equal to 100, which terminates the loop. In your example, you never exceed 99 and that is why you have an infinite loop.
Wayne King
2012-9-13
If want you create a vector with a while loop (again not sure why you want to do that), there are many ways to code it.
clear x;
n = 1;
k = 1;
while k<100
x(n) = k;
n = n+1;
k = k+2;
end
3 个评论
另请参阅
类别
在 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!