2016-04-13 11 views
0

von meiner vorherigen Codierung, dies meine neueste .. Ich möchte die Richtung der ursprünglichen 2 in die richtige Richtung ändern & gleichzeitig eine neue Nummer 2 erscheinen in die 3x3-Matrixwarum die ursprüngliche Zahl nicht in Array in Maltab wechseln

m=zeros(3); m(randi(numel(m)))=2 

am =

0 0 0 
0 0 0 
2 0 0 

, die zu der erwarteten Zufall Antwort des Original 2 wurden dann nehme ich die Richtung

case 'right' 
    %number= find(m); 

    if (m>=7); 
    circshift(m,[0 0]); 
     m_subset = setdiff(find(m),numel(m)); 

     m(randi(numel(m))) = 2 
     count=0; 
    elseif (m>=4) | (m<=6); 

     circshift(m,[0 1]); 
     m_subset = setdiff(find(m),numel(m)); 

     m(randi(numel(m))) = 2 

    elseif (m<4);  

     circshift(m,[0 2]); 
     m_subset = setdiff(find(m),numel(m)) ; 

     m(randi(numel(m))) = 2 

    else 
     msgbox('next'); 
    end 

die erwartete Antwort ist

0 0 0 
0 2 0 
0 0 2 

, wo die ursprüngliche Nummer 2 die richtige Richtung & eine zufällige 2 erscheint gehen. , aber die obige Kodierung hat nicht dazu geführt, dass die ursprüngliche Nummer die Richtung ändert.

Antwort

1

Wenn Sie aufrufen, ändert dies nicht den Eingang m an Ort und Stelle. Sie müssen mnach unter Aufruf circshift neu zuordnen.

m = circshift(m, [0, 2]); 

Auch für Ihre conditionals sollten Sie number und nicht m werden zu vergleichen. Stattdessen würde ich die zweite Ausgabe von find verwenden, um die Spalte herauszufinden und diese zu verwenden.

[r,c] = find(m); 

%// If column 1 
if c == 1 
    %// do thing 
elseif c == 2 
    %// do other thing 
else 
    %// do yet another thing. 
end 
+0

wow .. ich vergesse das total .. danke! – user6196619

Verwandte Themen