编写Java嵌套if if语句嵌套if语句?

时间:2014-11-24 05:49:43

标签: java nested excel-formula

我正在尝试将excel嵌套的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"
   }
}

谢谢

1 个答案:

答案 0 :(得分:1)

您确实正确地解释了Excel公式,但有三件事阻止您的代码成为“正确的Java”。

  • "P""F"等表达式在{}之间不会产生任何影响。关于Excel公式的事情是它实际上有一个值;这是一系列Java ifelse语句实际上没有的东西。如果你想要一个值,你可以把所有这些都写成一个返回值的Java方法,或者你可以使用三元运算符? :创建一个具有你想要的值的单个表达式。
  • 要比较Java中的字符串,您几乎总是希望使用equals方法,而不是==运算符。原因是两个不同的String对象可能具有相同的值;但在这种情况下,==会为false返回equals,但R3将返回true。
  • 目前尚不清楚String是什么类型。有一次,您将其视为类型为d3.equals("Feather") ? ((i3 > 1000 || r3.equals("n/a")) ? "" : w3.equals("F") ? "F" : (i3 <= 1000 && Integer.parseInt(r3) > 8) ? "F" : "P" ) : "" ,在另一点,您将其视为数字变量。与Excel公式不同,Java中的任何表达式都有明确定义的数据类型。

将公式转换为Java表达式,并注意这三个问题,我们得到类似的结果。

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 "";
    }
}

但这有点难以理解,因为有太多的三元运算符。大多数人宁愿把它写成一种方法,就像这样。

{{1}}