这是测试3个值之间相等性的有效方法吗?

时间:2018-06-20 03:04:34

标签: java

public static double tripleBet(Dice dice, double betAmount) {
    double payout = 0.0;
    double three_rolled = 3;

    if (dice.getFirst() == dice.getSecond() && dice.getThird() == dice.getFirst()) {
        payout = betAmount * three_rolled;
    } else {
        payout = -betAmount;
    }
    return payout;

}

在这里,我正在比较一个叫做“幸运”的游戏中的死亡情况。如果玩家下注,所有骰子都相同,那么我只需要返回一个支付金额。

条件语句中的表达式是我主要关心的问题。我想知道这样写是否有效或“好的做法”。

也欢迎其他任何建议。

3 个答案:

答案 0 :(得分:2)

是的,它是有效的。 df['td'] = df.apply(lambda x: x['td'] if x['X'] is not np.NaN else None, axis=1) 运算符是可传递的,表示A == B和B == C表示A == C。

因此,我可能将其写为

==

答案 1 :(得分:1)

您在做什么很好。也可以为此编写自己的辅助方法。

@SafeVarargs
public static final boolean equals(Object... objs) {
    if (objs== null || objs.length < 2) return false; // You may return true or throw exception

    for (int i = 0; i < nums.length - 1; i++) {
        if (!Objects.equals(objs[i], objs[i + 1])) return false;
    }

    return true;
}

如果您可能需要比较更多值的用例,这将使您以后更容易阅读。

 if (Helper.equals(dice.getFirst(), dice.getSecond(), dice.getThird()) {}

答案 2 :(得分:0)

到目前为止,我看不到您提供的代码有任何问题。

以下是您可以对代码进行的一些化妆品更新。将使它看起来更简单,并减少行数,并在此过程中还节省一些内存

public static double tripleBet(Dice dice, double betAmount) {

    double three_rolled = 3;

    // Using Ternary Operator we eliminated the need for a separate variable "payout" by simple returning the resultant values to the caller method.

    return (dice.getFirst() == dice.getSecond() && dice.getThird() == dice.getFirst()) ? betAmount * three_rolled : -betAmount;
}
  

P.S:如果变量three_rolled的值始终保持为3,那么我认为您可以将其分配给byte或类似的数据类型。这么小的值不需要double。更好的内存管理可带来令人满意的编译器和更简洁的代码。