0

誰でもこれで私を助けることができますか?if、elseif、elseを使用してmatlabで行列を構築しようとしていますが、うまくいきません。最後の else をスキップすると、すべて正常に動作しますが、最後の else 文を含むすべてを実行すると、elseifN==L(i)と elseifN==R(i)は動作しません。したがって、最後のelse文をスキップするif N==1elseif N>=2 && N<=4、、、、 elseif N>=5 && N<=9およびelseif N==L(i)正しくelseif R==L(i)実行されますが、elseifN==L(i)とelseifをすべて実行するとR==L(i)機能しません。

N = 72; 
M = 72;
adj = zeros(N,M)
L = [10:7:M-13]
R = [16:7:M-7]




for N = 1:M
    for i = 1:ceil((M-10)/15)

    if N==1
        adj(1,2:4)= 1

    elseif N>=2 && N<=4

              adj(N,(N+3))=1
              adj(N,(N+4))=1
              adj(N,(N+5))=1

      elseif N>=5 && N<=9

              adj(N,(N+5))=1
              adj(N,(N+6))=1
              adj(N,(N+7))=1

      elseif N==L(i)

              adj(N,N+7)=1
              adj(N,N+8)=1


      elseif N==R(i)

              adj(N,N+6)=1
              adj(N,N+7)=1

    else
              adj(N,N+6)=1
              adj(N,N+7)=1
              adj(N,N+8)=1    
    end


    end
end
4

1 に答える 1

1

switch case ステートメントを使用してみてください

N = 72; 
M = 72;
adj = zeros(N,M);
L = [10:7:M-13];
R = [16:7:M-7];

for N = 1:M
    for i = 1:ceil((M-10)/15)

        switch(N)

            case {1}
               adj(1,2:4)= 1;

            case {2:4}
              adj(N,(N+3))=1;
              adj(N,(N+4))=1;
              adj(N,(N+5))=1;

            case {5:9}
              adj(N,(N+5))=1;
              adj(N,(N+6))=1;
              adj(N,(N+7))=1;

            case {L(i)}
              adj(N,N+7)=1;
              adj(N,N+8)=1;

            case {R(i)}
              adj(N,N+6)=1;
              adj(N,N+7)=1;

            otherwise
              adj(N,N+6)=1;
              adj(N,N+7)=1;
              adj(N,N+8)=1;  
            end


    end
end

これにより、コードに対してわずかに異なる答えが得られます。最初の満足のみcaseがトリガーされることに注意してください。したがって、{5:9}との両方{L(i)}が true の場合、{5:9}ケースのみがトリガーされます。

また、それは単なるタイプミスか、言葉遣いを理解していない可能性がありますがR==L(i)、説明に書いていますが、コードには表示されません。

編集:以下のコメントから、一度に複数のまたはステートメントをトリガーし
たいようです。この場合、一連の も も機能しません。すべてのs を、s を使用せずに個別の個別のステートメントに置き換えるだけです。意図しないステートメントを含め、任意のステートメントがトリガーされる可能性があることに注意してください。そのため、各条件を注意深く検討する必要があります。elseifcaseelseifcaseelseififelseifif

于 2014-03-09T14:43:49.720 に答える