2013-04-07 32 views
0

輸出始終兩個值時,它被認爲是隻有1 ..在Matlab中使用IF語句和結構的怪異行爲?

s是一個結構,其中

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; 

它總是s打印

slackp(1)=[0 350] 

錯誤繼續和多個其他項與他們一起0!這是爲什麼發生?我只是想存儲350,我不想在那裏0!

我試圖調試問題,並認識到,每當S1沒有= 1時,將打印一個0。它不應該。如果s1不是1那麼就跳過IF語句。 s2也一樣。

+0

「然而我注意到,在在t = 2下面的語句」。這是因爲'slackp(T)= 350;'是做'slackp(2)= 350;'這意味着它的第二個元素設置爲350 – Justin 2013-04-07 21:27:23

+0

如果slackp是空的,那麼您一個元素添加到slackp(2)你會得到一個2元素數組,其中第一個元素爲0.這是發生在這裏的事情嗎? – Molly 2013-04-07 21:28:22

回答

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 = 
​​

或者,您可以使用末尾+ 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 
+0

這不適合我,我不知道爲什麼。我更新了代碼,我進一步調試了它,並意識到只有在有額外的IF語句時纔會發生這種情況。 – NLed 2013-04-07 23:21:42

+0

如果狀態是什麼意思?你對slackp2使用單獨的索引嗎? – Molly 2013-04-07 23:27:52

+0

不,我爲整個循環使用相同的索引值。一個額外的IF語句,我在更新的問題中添加。這是'如果s(t).eG == 0' ..顯然如果我不使用它,這些值將被打印並正確存儲,否則,額外的零開始出現。 – NLed 2013-04-07 23:41:34