2013-06-25 31 views
7

在Matlab中,我在for循環中執行計算,但是如果滿足某些條件,我試圖找到一種在for循環中跳過迭代的方法。我寫了一個快速的例子來說明我的問題。在MATLAB中,如果滿足某些條件,如何跳過預定數量的for循環迭代?

在下面的代碼中,for循環將經過迭代1和2並按預期輸出到r中。 r(1)將是1,r(2)將是2.一旦for循環遍歷迭代3,值20將被放置到r(3)中。在這之後,我想讓for循環跳過接下來的5次迭代,直接進入for循環的迭代8。

for i=1:1:10 
    if i==3 
     r(i)=20; 
     i = i+5; 
    else 
     r(i) = i; 
    end 
end 

R的實際結果如下:

r = 

1  2 20  4  5  6  7  8  9 10 

不過,我想對於結果出現類似於以下。 (請注意,我不看,以填補所需的R(4):R(7)0,而是看4至7以跳過循環迭代完全)

r = 

1  2 20  0  0  0  0  8  9 10 

如果任何人有意見,這將不勝感激。謝謝!

回答

7

使用while循環,而不是一個for循環手動增加它:

i=1; // index for loop 
k=1; // index for r 
r = zeros(1,10) // pre-allocate/cut is faster 
while i <= 10 
    if i == 3 
    r(i)=20; 
    i = i+5; // skip multiple iterations 
    else 
    r(k)=i; 
    i=i+1; // loop increment 
    k=k+1; // vector increment 
    end 
end 
r(k+1:end) = []; // Remove unused portion of the array 
+0

謝謝您的信息,包括預先分配的額外信息! – Aaron

+0

沒問題,我通常使用大型矢量,但開發並不是一個壞習慣! :) –

+3

順便說一下,你的代碼不起作用的原因是,MATLAB實際上存儲自己的「參考」,我在for循環中使用,所以雖然你可以得到我,你不能編輯的價值。我忘了它是如何工作的,但是我記得當我是編程新手時,我看了起來,有點有趣哈哈 – Shaun314

2

最基本的實現是僅從循環中省略那些。

for i= [1:3 8:10] 
    if i==3 
     r(i)=20; 
    else 
     r(i) = i; 
    end 
end 

然而,這可能不符合你的需要,如果你真的需要做循環指標的動態確定。在這種情況下,使用while循環,如下所示:

i = 1; 
while i <= 10 
    if i==3 
     r(i)=20; 
     i = i+5; 
    else 
     r(i) = i; 
     i = i+1 
    end 

正如你所看到的,也有當您嘗試並更改索引變量wihtin for循環的問題。

+0

謝謝你的迴應! – Aaron

0

如果你知道在哪裏可以跳過你可以做類似

ind = [1:2,8:10] 
r(ind) = ind 
r(3) = 20 

這種方式,您也避免循環。如果在跳過使用兩個不同的循環之前無法確定您執行了多少循環,並使用中斷關鍵字來停止第一次迭代。

+0

感謝您的回覆,但跳過的迭代是未知的。 – Aaron

相關問題