任何人都可以帮助我。我正在尝试使用if,elseif和else在matlab中构建一个矩阵,但它对我不起作用。如果我跳过最后的其他一切都正常,但如果我运行所有内容,包括最后一个其他句子,elseif N==L(i)
和elseif N==R(i)
不起作用。因此,如果我跳过最后一个句子if N==1
,elseif N>=2 && N<=4
,elseif N>=5 && N<=9
,elseif N==L(i)
和elseif R==L(i)
正确运行,但如果我在N==L(i)
运行其他所有内容如果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
答案 0 :(得分: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)
但未出现在您的代码中。
编辑:
从下面的评论中,您似乎希望一次触发多个elseif
或case
语句。在这种情况下,一系列elseif
或case
都不起作用。只需将所有elseif
替换为单独的,单独的if
语句,而不使用任何elseif
。请注意,现在任何if
语句都可以触发,包括您不想要的语句。因此,您必须仔细查看每种情况。