您可以使用while
基於觸摸
n = [1,3,0,5,1,2,0,4,3];
m = 0;
idx = 1;
while idx <= numel(n)
if n(idx) > 0
m(end) = m(end) + n(idx);
else
m(end+1) = 0;
end
idx = idx + 1;
end
如果n(idx)
是肯定的(我從代碼片斷拍攝,你有興趣的正值,如果值遍歷n
和更新m
您對非零值感興趣,只需將其更改爲n(idx)~=0
),將其添加到m
中的最後一個元素,否則將添加一個新元素到m
以適應下次運行。這是原則上for
循環,這樣就可以把它改寫爲
n = [1,3,0,5,1,2,0,4,3];
m = 0;
for idx = 1:numel(n)
if n(idx) > 0
m(end) = m(end) + n(idx);
else
m(end+1) = 0;
end
end
但現在,因爲你是在處理一個行向量可以使用的for
力量迭代的n
元素:
n = [1,3,0,5,1,2,0,4,3];
m = 0;
for ni = n
if ni > 0
m(end) = m(end) + ni;
else
m(end+1) = 0;
end
end
我們可能應該停下來,但有一些有趣的(但絕對不太可讀)的方式來擺脫if
子句:
m = 0;
for ni = n
I = ni > 0;
m(end+~I) = I*(m(end) + ni);
end
按照你定義'n'的方式,你的謂詞'n> 1'永遠不會評估爲邏輯'0'(即MATLAB的錯誤),你確實會陷入無限循環。 – Jubobs 2014-11-03 22:07:06
無論如何連續有兩個零?另外,請記住,您不應該在MATLAB中使用'while'循環來解決這類問題。你可以使用更好的方法。 – 2014-11-03 22:15:40
有些情況下連續的零,我很樂意學習如何做到這一點,沒有一個while循環,如果這確實會更好。 – user4212064 2014-11-03 22:22:21