2014-11-24 271 views
0

我想轉換爲Excel嵌套的IF語句轉換成代碼語言,但我不知道如果我做正確,並希望我能得到一些幫助如果語句嵌套if if語句嵌套if語句,

下面是Excel的語句:

=IF(D3="Feather",IF(OR(I3>1000,R3="n/a"),"",IF(W3="F","F",IF(AND(I3<=1000,R3>8),"F","P"))),"") 

我的代碼:

if(D3 == "Feature"){ 
    if (I3>1000 || R3 =="n/a") { 

    } else if (W3=="F"){ 
     "F" 
    } else if(I3<=1000 && R3>8){ 
     "F" 
    } else { 
     "P" 
    } 
} 

謝謝

+0

Java三元運算符(由'?'和':'字符組成)與Java'if/else'構造函數更好地匹配Excel IF函數。你可能會很好地閱讀它。 – 2014-11-24 05:52:09

+0

謝謝你的回覆。但是我的問題是我對excel語句的熟練度不夠,所以我不確定我是否正確解釋。我首先需要在使用三元運算符之前正確理解excel語句 – mg555 2014-11-24 06:07:10

+0

我已經重新打開了這個。這真的沒有什麼問題,它是作爲一個副本關閉的。 – 2014-11-24 08:51:00

回答

1

你確實已經正確地解釋了Excel的公式,但有三件事會阻止你的代碼成爲「正確的Java」。

  • 表達式像"P""F"等真的沒有{}之間自己坐在任何影響。關於Excel公式的事情是它實際上有一個值;這是一系列Java語句實際並不具備的Java ifelse。如果你想要一個值,你可以把所有這些都寫成一個返回值的Java方法,或者你可以使用三元運算符? :來創建一個你想要的值的單一表達式。
  • 要比較Java中的字符串,您幾乎總是希望使用equals方法,而不是==運算符。原因是兩個不同的String對象可能具有相同的值;但在這種情況下,==將返回false,但equals將返回true。
  • 目前尚不清楚R3是什麼類型。在某一點上,你把它看作是它的類型是String,並且在另一點上,你把它當作一個數值變量。與Excel公式不同,Java中的任何表達式都有一個定義良好的數據類型。

將公式轉換成Java表達式,並小心處理這三個問題,我們得到類似這樣的東西。

d3.equals("Feather") ? 
    ((i3 > 1000 || r3.equals("n/a")) ? "" : 
     w3.equals("F") ? "F" : 
     (i3 <= 1000 && Integer.parseInt(r3) > 8) ? "F" : "P") : "" 

但是這有點難以閱讀,因爲有太多的三元運算符。大多數人寧願寫這個作爲一種方法,就像這樣。

public String excelFormula(String d3, int i3, String r3, String w3) { 
    if (d3.equals("Feather")) { 
     if (i3 > 1000 || r3.equals("n/a")) { 
      return ""; 
     } else if (w3.equals("F")) { 
      return "F"; 
     } else if (i3 <= 1000 && Integer.parseInt(r3) > 8) { 
      return "F"; 
     } else { 
      return "P"; 
     } 
    } else { 
     return ""; 
    } 
}