我正在尝试将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"
}
}
谢谢
答案 0 :(得分:1)
您确实正确地解释了Excel公式,但有三件事阻止您的代码成为“正确的Java”。
"P"
,"F"
等表达式在{
和}
之间不会产生任何影响。关于Excel公式的事情是它实际上有一个值;这是一系列Java if
和else
语句实际上没有的东西。如果你想要一个值,你可以把所有这些都写成一个返回值的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}}