2016-05-23 43 views
3

我都執行這個簡單的循環腳本在MATLABMatlab的:更新一個循環最大計數不起作用

clc;clear; close all; 
m = 100; 
for i = 1:m 
    if(i == 2) 
     m = 1000; 
    end 
end 

,結果發現,「我」只循環直到「100」,但不是「1000」。爲什麼..??

+1

閱讀[for](http://se.mathworks.com/help/matlab/ref/for.html),especiall Ÿ最後一節。 _避免爲循環語句中的索引變量賦值。 for語句會覆蓋循環內對索引所做的任何更改._ –

+0

這是您真正想要的嗎?或者你真的想要做其他事情嗎? – Bernhard

+0

@Bernhard:是的,這是我想要的。 :) –

回答

4

語句for i=1:m將數組1:m分配給運算符在循環中將採用的值列表。當循環開始執行時會發生這種情況(注意:您可以使用任何數組,並且它將逐列處理; for letter='abcde';fprintf('%s\n',letter);end工作正常)。

如果要調整多久你的循環將通過迭代,我建議使用while循環:

ct = 1; 
maxIterations = 100; 
success = false; 
while ~success 
    fprintf('iteration %i/%i\n',ct,maxIterations); 
    ct = ct + 1; 
    if ct == 2 
     maxIterations == 1000; 
    end 

    if ct > maxIterations 
     success = true; 
    end 
end 
+0

好吧,我試過這個(類似於您的想法) 'm = 100; i = 0; (i

-2

我不是專家,但在100 for循環替換m個變種第一次運行,然後它執行從1到100(不是1到m)的循環,它不檢查每次運行什麼是m它知道m是100,它運行直到它達到100,例如,如果你的腳本是這樣的:

<code> 
m=100; 
for i=1:m (m is 100) 
if(i==2) 
    m=1000; 
    for i=1:m (m is 1000) 
    a=xyz; 
    end 
    end 
end 
</code> 
+0

我會說,一個while循環是這裏的解決方案。你可能不想重申,以防我== 2 ... – patrik