2012-11-26 102 views
2

我想獲得一個簡單的elseif語句進入IDL,並且有一段時間。 matlab代碼看起來像這樣。idl elseif問題/混淆

a = 1 
b = 0.5 

diff = a-b 
thres1 = 1 
thres2 = -1 

if diff < thres1 & diff > thres2 
    'case 1' 
elseif diff > thres1 
    'case 2' 
elseif diff < thres2 
    'case 3' 
end 

但是,IDL代碼並不那麼簡單,而且我有麻煩的語法正確。幫助國: 語法 IF表達式THEN語句[ELSE聲明】 或 IF表達然後開始 聲明 ENDIF [ELSE BEGIN 聲明 ENDELSE]

但犯規就如何使用多個表達式的例子, ELSEIF。我已經嘗試了很多變化,並且似乎無法做到。

任何人都有建議嗎?這裏有一些我嘗試過的東西:

if (diff lt thres1) and (diff gt thres2) then begin 
    print, 'case 1' 
endif else begin 
if (diff gt thres1) then 
    print, 'case 2' 
endif else begin 
if (diff lt thres2) then 
    print, 'case 3' 
endif 

if (diff lt thres1) and (diff gt thres2) then begin 
    print, 'case 1' 
else (diff gt thres1) then 
    print, 'case 2' 
else (diff lt thres2) then 
    print, 'case 3' 
endif 
+0

如果任何值等於閾值,沒有的情況下,將被執行 –

+0

是的,你是正確 我應該說,這不是導致我問題的邏輯,而是實際的語法,IDL不會編譯和運行代碼考試我正在展示。 – nori

回答

3

IDL中沒有elseif聲明。嘗試:

a = 1 
b = 0.5 

diff = a - b 
thres1 = 1 
thres2 = -1 

if (diff lt thres1 && diff gt thres2) then begin 
    print, 'case 1' 
endif else if (diff gt thres1) then begin 
    print, 'case 2' 
endif else if (diff lt thres2) then begin 
    print, 'case 3' 
endif 
+0

謝謝mgalloy!抱歉,我的回覆太晚了,我正在度假,剛回到工作崗位。 2013年快樂! – nori

0

所以我想通了。對於我們這些對IDL語言來說很陌生的人。

在我看來,IDL只能爲每個if語句處理兩個case,所以我不得不在另一個'if'塊中寫入。

希望這可以幫助那裏的人。

a = 1; 
b = 2.5; 

diff = a-b; 
thres1 = 1; 
thres2 = -1; 

if diff gt thres1 then begin 
    print,'case 1' 
endif 

if (diff lt thres2) then begin 
    print,'case 2' 
    endif else begin 
    print,'case 3' 
endelse 
0

mgalloy的答案是正確的,但你也可能看到人(比如我),誰不使用開始/ endif如果有隻有一行。 (當然,如果有人回去嘗試插入一行,而沒有意識到你做了什麼,這會導致問題,所以邁克爾的方法可能會更好......這只是當你看到這種格式時,你意識到它正在做同樣的事情:

if (diff lt thres1 && diff gt thres2) then $ 
    print, 'case 1' $ 
else if (diff gt thres1) then $ 
    print, 'case 2' $ 
else if (diff lt thres2) then $ 
    print, 'case 3' 

或可能使一個人不容易插入的格式:

if  (diff lt thres1 && diff gt thres2) then print, 'case 1' $ 
else if (diff gt thres1)     then print, 'case 2' $ 
else if (diff lt thres2)     then print, 'case 3' 
+0

謝謝喬,非常感謝另一種選擇。乾杯! – nori