this should be easy I have a while loop that is infinite

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

2 Comments

I see that i can use the break comand, but don't think that is the best choise here anyother options out there??
what do you guys think of this changing the while x<=99 to x==1? i found that the loop stops as i would want it to.

Sign in to comment.

 Accepted Answer

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 Comments

i just need it to output an array that is 1:2:100 anf stop. i think that you and king are on to something with the my range being ouside of 99. I don't get how with the condition being x<=99 it is out of range though.
If you simply need x to be 1:2:100, then why use a loop at all?
x = 1:2:100; % There you go! All done....
I am studing for a test and one of the example is to make a while loop output x = 1:2:100; and when I try to make it work i get the infinite loop. But yes i agree that x = 1:2:100; is a much better way to get the answer, but i can't use that...
here is the problem:
Complete the following problems:
a. Create a for loop that will output the numbers from 1 to 100 by 2s (1, 3, 5, …, 97, 99).
b. Rewrite the above for loop as a while loop.
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
thanks matt i needed a laugh! :)

Sign in to comment.

More Answers (4)

x = 1;
while x <= 99
x=x+2
% do
end

4 Comments

thanks but that is not what i need to output I need it to out put a vector of x = 1:2:100 not just a list of numbers but thanks anyway
and what a while loop has to do with that?
exactly it is a proble that we were given on a study guide i would love to just make it x = 1:2:100 , but the prof wants it to be a while loop.here is the question:
Complete the following problems:
a. Create a for loop that will output the numbers from 1 to 100 by 2s (1, 3, 5, …, 97, 99).
b. Rewrite the above for loop as a while loop.
x=1
while x<=100-2
x(end+1)=x(end)+2
end

Sign in to comment.

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.

1 Comment

I need the while loop to because it is what the prof asked for. i agree that the
x = 1:2:100;
is much simpler and cleaner but that's what he wants.
But with 99 being greater-than-or-equal-to x shouldn't 99 be withing the vector since i can see it on the output?

Sign in to comment.

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 Comments

and again i wouldn't regularly do such a thing but in this instance I have to compute it that way. I am working through some example problems that we were given to study for a test and this is one of those. the original problem is:
Complete the following problems:
a. Create a for loop that will output the numbers from 1 to 100 by 2s (1, 3, 5, …, 97, 99).
b. Rewrite the above for loop as a while loop.
ok so i misread the question! it isn't a vector just a list of numbers that is being outputted. crap! sorry.
no its an actual problem. here is what i came up with a min ago:
clc, clear all, close all;
x = 0;
for x = 1:2:100;
disp(x)
end
display('while')
x1 = -1;
while x1 <=97;
x1=x1+2;
disp(x1)
end

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!