2013-06-25 25 views
7

Trong Matlab, tôi đang thực hiện các phép tính trong một vòng lặp for nhưng cố gắng tìm cách bỏ qua các lần lặp trong vòng lặp nếu đáp ứng các tiêu chí nhất định. Tôi đã viết ra một ví dụ nhanh để minh họa câu hỏi của tôi.Trong MATLAB, làm thế nào tôi có thể bỏ qua một số được xác định trước cho lặp vòng lặp nếu đáp ứng các tiêu chí nhất định?

Trong mã bên dưới, vòng lặp for sẽ trải qua các lần lặp 1 và 2 và xuất như mong đợi vào r. r (1) sẽ là 1 và r (2) sẽ là 2. Khi vòng lặp for chạy qua lần lặp 3, giá trị 20 sẽ được đặt vào r (3). Sau khi điều này xảy ra, sau đó tôi muốn vòng lặp for bỏ qua 5 lần lặp tiếp theo và đi thẳng đến vòng lặp 8 của vòng lặp for.

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

Kết quả thực tế cho r là như sau:

r = 

1  2 20  4  5  6  7  8  9 10 

Tuy nhiên, tôi muốn cho kết quả xuất hiện tương tự như sau. (XIN LƯU Ý rằng tôi không tìm cách để lấp đầy r mong muốn (4):. R (7) với 0 nhưng thay vì tìm cách để bỏ qua cho lần lặp vòng 4 đến 7 hoàn toàn)

r = 

1  2 20  0  0  0  0  8  9 10 

Nếu ai có lời khuyên , điều đó sẽ được đánh giá cao. Cảm ơn bạn!

Trả lời

7

Sử dụng một vòng lặp while thay vì một vòng lặp for để tăng nó bằng tay:

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

Cảm ơn bạn đã cung cấp thông tin bao gồm cả bổ sung về phân bổ trước! – Aaron

+0

Không vấn đề gì, tôi thường làm việc với các vectơ lớn, nhưng nó không phải là một thói quen xấu để phát triển! :) –

+3

BTW, lý do mã của bạn không hoạt động là MATLAB thực sự lưu trữ "tham chiếu" của riêng nó vào i được sử dụng trong vòng lặp, vì vậy trong khi bạn có thể nhận được i, bạn không thể chỉnh sửa giá trị. Tôi quên chính xác cách thức hoạt động này, nhưng tôi nhớ khi tôi mới bắt đầu lập trình, tôi đã xem xét điều này, thật thú vị haha ​​ – Shaun314

2

Triển khai cơ bản nhất là chỉ bỏ qua những người trong vòng lặp.

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

Tuy nhiên, điều đó có thể không đáp ứng nhu cầu của bạn, nếu bạn thực sự cần phải xác định chỉ số vòng lặp động. Trong trường hợp đó, sử dụng một vòng lặp while, như thế này:

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

cuối

Như bạn đã thấy, có những vấn đề khi bạn cố gắng và thay đổi biến indexing wihtin một vòng lặp for.

+0

Cảm ơn bạn đã phản hồi! – Aaron

0

Nếu bạn biết được nơi để bỏ qua bạn có thể làm một cái gì đó giống như

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

Bằng cách này bạn cũng tránh vòng lặp for . Nếu bạn không thể xác định số lượng vòng bạn thực hiện trước khi bỏ qua sử dụng hai vòng lặp khác nhau và sử dụng các từ khóa ngắt để ngừng lặp đầu tiên.

+0

Cảm ơn bạn đã trả lời nhưng không thể bỏ qua các lần lặp lại. – Aaron

Các vấn đề liên quan