当它应该只有1时,输出总是两个值。
是一个结构
1x1024 struct array with fields:
ID
s1
s2
s3
s4
PB1
PB2
PB3
PB4
eG
next
我有以下循环:
for t=1:length(s)
if s(t).eG==0
if s(t).s1==1
if s(t).PB1==0
slackp(t)=0;
elseif s(t).PB1==1
slackp(t)=350;
elseif s(t).PB1==2
slackp(t)=600;
elseif s(t).PB1==3
slackp(t)=750;
end
end
if s(t).s2==1
if s(t).PB2==0
slackp2(t)=0;
elseif s(t).PB2==1
slackp2(t)=500;
elseif s(t).PB2==2
slackp2(t)=620;
elseif s(t).PB2==3
slackp2(t)=785;
end
end
end
end
但是我注意到在t = 2时的以下陈述
elseif s(t).PB1==1
slackp(t)=350;
始终打印
slackp(1)=[0 350]
错误继续发生,多个其他条目与它们并列0!为什么会这样?我只是想存储350,我不想要0!
我尝试调试问题,并意识到每当s1不是= 1时,它就会打印0.它不应该。如果s1不是1
,那么只需跳过IF语句。同样适用于s2。
答案 0 :(得分:1)
要解决此问题,您可以使用不同的变量来索引slackp而不是索引s。例如:
clear all
s(1).s1 = 0;
s(1).PB1 = 2;
s(1).PB2 = 2;
s(1).s2 = 0;
s(2).s1 = 1;
s(2).s2 = 1;
s(2).PB1 = 1;
s(2).PB2 = 3;
s(3).s1 = 1;
s(3).PB1 = 2;
s(3).s2 = 1;
s(3).PB2 = 2;
index1 = 1;
index2 = 1;
for t=1:length(s)
if s(t).s1==1
if s(t).PB1==0
slackp(inde1x)=0;
index1 = index1 + 1;
elseif s(t).PB1==1
slackp(index1)=350;
index1 = index1 + 1;
elseif s(t).PB1==2
slackp(index1)=600;
index1 = index1 + 1;
elseif s(t).PB1==3
slackp(index1)=750;
index1 = index1 + 1;
end
end
if s(t).s2==1
if s(t).PB2==0
slackp2(index2)=0;
index2 = index2 + 1;
elseif s(t).PB2==1
slackp2(index2)=500;
index2 = index2 + 1;
elseif s(t).PB2==2
slackp2(index2)=620;
index2 = index2 + 1;
elseif s(t).PB2==3
slackp2(index2)=785;
index2 = index2 + 1;
end
end
end
会给你:
slackp =
350 600
slackp2 =
785 620
或者,您可以使用end + 1来索引输出数组,如下所示:
slackp = [];
for t=1:length(s)
if s(t).s1==1
if s(t).PB1==0
slackp(end + 1)=0;
elseif s(t).PB1==1
slackp(end + 1)=350;
elseif s(t).PB1==2
slackp(end + 1)=600;
elseif s(t).PB1==3
slackp(end + 1)=750;
end
end
end