2016-06-18 11 views
1

Angenommen, ich habe eine for-Schleife, die von 10 bis 1 mit dem Zähler 'k' zählt. In der for-Schleife, wenn 'k' 5 wird, mache ich k = 4. Wenn ich "k" in jeder Schleife ausgäbe, erwartete ich "10 9 8 7 6 5 3 2 1", überspringe die 4. Stattdessen habe ich alle Zahlen von 10 bis 1. Wie kann ich es so machen, dass es 4 überspringt ?MATLAB: Wie aktualisiert man die Zählervariable in einer for-Schleife?

for k=10:-1:1 

     if i==5 
     k=i-1; 
     end 
end 

Antwort

3

Sie können den Schleifenindex nicht innerhalb der Schleife in MATLAB ändern. Ihre beiden Optionen sind wegzulassen, dass dieser Indexwert vor der Schleife

numbers = 10:-1:1; 
numbers(numbers == 4) = []; 

for k = numbers 
    % Stuff 
end 

Oder Sie eine while Schleife statt einer for Schleife verwenden können

k = 10; 
while k > 0 

    if k == 5 
     k = k - 1; 
    end 

    k = k - 1; 
end 

Oder Sie können auch tun, was @beaker hat vorgeschlagen, mit continue.

1

Das Ändern der Schleifenvariable ändert nicht wirklich die Schleife. Was Sie ändern, ist der Wert der Variablen für diese Iteration. Stattdessen können Sie MATLAB sagen, auf die nächste Iteration überspringen continue mit:

for k=10:-1:1 
    if k==4 
     continue 
    end 
    disp(k) 
end 

Ergebnis:

10 
9 
8 
7 
6 
5 
3 <-- skipped 4 
2 
1 

Edit: Ich habe erkannt, dass Sie 4 und nicht 5-Code überspringen wollte gewesen angemessen aktualisiert.

1

Wenn ich mich richtig erinnere, erstellt Matlab ein Array, wenn Sie eine for-Schleife aufrufen. Wenn Sie

i = 10:-1:1 

geben Sie am Ende mit

i = 

10  9  8  7  6  5  4  3  2  1 

Ich würde empfehlen, so etwas wie dies zu tun:

for i = [10:-1:6, 4:-1:1] 
    i 
    <do some other stuff here> 
end 

dies bringt uns von 10 bis 1 Überspringen 5.

+0

Dies ermöglicht Sie halten die Variable für i herum, wenn Sie es in der Zukunft brauchen. Es ist erwähnenswert, dass wenn Sie es so machen und lernen, wie die Arrays funktionieren, werden Sie wahrscheinlich in der Zukunft einige Schmerzen ersparen. –

0

Hier ist eine alternative Methode

NumbertoSkip = [4]; 
for k=10:-1:1 

     if(~ismember(NumbertoSkip,k)) 
     disp(k) 
     end 
end 

Der Code überprüft, ob es die aktuellen k nicht in dem NumbertoSkip Vektor vorhanden ist, ist es es zeigt können Sie überspringen eine beliebige Anzahl es nur zum Beispiel in dem NumbertoSkip Vector setzen, wenn NumbertoSkip = [4 5];

%  10 
% 
%  9 
% 
%  8 
% 
%  7 
% 
%  6 
% 
%  3 
% 
%  2 
% 
%  1 
Verwandte Themen