0

Can anyone help me with this. I am trying to construct a matrix in matlab using if, elseif and else but it does not work for me. If I skip the last else everything works correctly but if I run everything, including the last else sentence, elseif N==L(i) and elseif N==R(i) does not work. So if I skip the last else sentence if N==1, elseif N>=2 && N<=4, elseif N>=5 && N<=9, elseif N==L(i) and elseif R==L(i) runs correctly but if I run everything elseif N==L(i) and elseif R==L(i) does not work.

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)}为真,则只会{5:9}触发案例。

此外,这可能只是一个错字,或者我不理解措辞,但您R==L(i)在描述中写了但没有出现在您的代码中。

编辑:从您下面的评论来看,您似乎希望一次触发
多个elseifor语句。case在这种情况下,一系列elseifs 或cases 都不起作用。只需将所有elseifs 替换为单独的、单独的if语句,而不需要任何elseifs。请注意,现在任何if语句都可以触发,包括您不打算触发的语句。因此,您必须仔细查看每种情况。

于 2014-03-09T14:43:49.720 回答