对If..Else使用条件运算符

时间:2015-09-03 05:54:46

标签: java talend

我正在尝试使用带有条件运算符的IF..ELSE逻辑修改Talend Open Studio中的现有表达式。

逻辑是:

    IF (row73.Month01 == NULL || row73.Month01 == 0.0) THEN 1
    ELSE
    { 
        IF (row46.month01 == NULL || row46.Month01 == 0.0) THEN 1
        ELSE (row46.Month01*100.0f/row73.Month01)
    }

我输入的条件运算符的表达式为:

    (row73.Month01==null||row73.Month01==0.0)?1: (row46.Month01==null||row46.Month01==0.0)?1: (row46.Month01*100.0f/row73.Month01))

然而,当在Talend中测试表达式时,它说“Unresolved compilaton”。我尝试在一个独立的java骨架文件中测试上面的内容,但后来我得到了“source_file.java:13:error:on”?“

我在Talend的上述表达格式中做错了什么?

非常感谢任何意见。

TIA, 蜂

实现了一件事。 Month01的数据类型在工作流中定义为Float。鉴于此,Null检查甚至有效吗?因为这是原始数据类型而不是对象。不应该只检查row73.Month01 == 0.0就够了吗?

目前,由于Month01在输入源中具有空值,因此该作业在空指针异常上失败。因此试图处理它。

再次感谢。

2 个答案:

答案 0 :(得分:0)

中存在语法错误
(row73.Month01==null||row73.Month01==0.0)?1: 
(row46.Month01==null||row46.Month01==0.0)?1: 
(row46.Month01*100.0f/row73.Month01))

第二行需要一个左括号:

(row73.Month01==null||row73.Month01==0.0)?1: 
((row46.Month01==null||row46.Month01==0.0)?1: 
(row46.Month01*100.0f/row73.Month01))

答案 1 :(得分:0)

语法错误只是最后一行的一个额外括号,错误值 100.0f ,同时乘以double值,而 1 而不是1.0

正确的语法如下:

    (row73.Month01==null||row73.Month01==0.0)?1.0: 
    (row46.Month01==null||row46.Month01==0.0)?1.0:
    (row46.Month01*100.0/row73.Month01)

但是,如果您未使用 == null 的任何Month值,源中的值为null,则作业将因空指针异常错误而失败。对于您的语法,现在使用上面的语法不会出现任何错误,只是为了确保您使用的是双数据类型。

为了更好的练习,在使用tmap时总是使用非null条件。