How can I use while loops to determine if an element is larger than the element below it and store the results in a vector with 1 representing true and 0 representing false?
6 次查看(过去 30 天)
显示 更早的评论
I coded for my while loop but I can't get the final answer and the error showed that 'Array indices must be positive integers or logical values.' Can someone help me with this? Thank you so much!!
A=randi([0 9],1,randi([100 300]))'
n=numel(A)-1
B=zeros(n,1)
while i<=n
if A(i)>A(i+1)
B(i,1)=true
else
B(i,1)=false
end
i=i+1
end
1 个评论
Stephen23
2021-3-26
You are using i as an index. What is the value of i ? (hint: the square root of -1)
采纳的回答
Matt J
2021-3-26
A=randi([0 9],1,10)';
n=numel(A)-1;
B=zeros(n,1);
i=1;
while i<=n
if A(i)>A(i+1)
B(i,1)=true;
else
B(i,1)=false;
end
i=i+1;
end
A.',B.'
0 个评论
更多回答(1 个)
John D'Errico
2021-3-26
编辑:John D'Errico
2021-3-26
"While" this does not answer your question, I would not use a while loop at all. Learn to use MATLAB as it is designed.
A = randn(1,8) % some random numbers
B = [false,diff(A)>0] % A vector of the same length as A, true when A(i+1) > A(i)
B is the same length as A. Note that A(1) will never be greater than the preceding element, since there is no preceding element.
Could you use a while loop? Yes. A for loop would make more sense as a loop here, since you want to test EVERY pair of elements.
B = false(size(A)); % preallocate B
for ind = 2:numel(A)
B(ind) = A(ind) > A(ind-1);
end
B
Same result as the single statement, but a loop.
CAN you use a while loop? Well, yes. Learn when to use one type of loop over another when you REALLY need to use a loop. A while loop is good when you don't know how often the loop will run. A for loop is right when you have a known, fixed number of iterations.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!