比较两个数组。处理条件的明智方法是什么?

时间:2018-12-07 09:40:41

标签: java arrays logical-operators

我想用2个2个值的数组进行计算,我有5个适用于5种不同条件的公式。

例如,数组:

Array 1: [15, 17]
Array 2: [15, 16]

那么有5个条件:

AB AC - condition 1
AB AB - condition 2
AB AA - condition 3
AA AC - condition 4
AA AA - condition 5

它们始终至少具有1个相同的值。如果它们只有1个相同的值,例如上面的示例,则[15,17]和[15,16]中都存在15(或A),但是17(可以是B或C)和16(可以是B或C) C)有所不同,这是第一个条件。如果它们相同,并且每个数组具有2个不同的值,例如[15,16]和[15,16],则这将是第二个条件。

执行此操作的明智方法是什么?我正在考虑使用...

if (condition 1){
   formula 1
}else if(condition 2){
   formula 2
}else if(condition 3){
   formula 3
}else if(condition 4){
   formula 4
}else if(condition 5){
   formula 5
}

但是,这看起来确实很可怕,我不确定如何正确编写条件。

2 个答案:

答案 0 :(得分:1)

首先,正如我在评论中所说,为所有情况编写良好的单元测试。这些应该确保您最终编码的任何解决方案都是正确的。我和许多人更愿意在实际代码之前 编写单元测试(如果这听起来很奇怪并且您想了解更多,请搜索TDD)。

第二,我的样式将使用嵌套的if / else语句(伪代码):

    if (arr1[0] != arr2[0]) {
        throw some exception;
    }

    if (arr1[0] == arr1[1]) { // we now know arr1[0] == arr2[0] == arr1[1]
        if (arr2[0] == arr2[1]) { // all equal
            assert arr1[1] == arr2[1];
            // condition 5
        } else {
            // condition 4
        }
    } else { // arr1[0] != arr1[1]
        if (arr2[0] == arr2[1]) { // arr1[0] == arr2[0] == arr2[1]
            // condition 3
        } else {
            if (arr1[1] == arr2[1]) {
                // condition 2
            } else {
                // condition 1
            }
        }
    }

答案 1 :(得分:0)

可悲的是,我看不到任何摆脱这些测试的方法。您可以将它们隐藏在工厂之间和/或使用Map<Predicate, BiConsumer>(其中BiConsumer是公式)。但是以一种或另一种方式,您将拥有这五个条件。

拥有简洁代码的重点是正确命名您的条件或谓词。