根据布尔值插入参数

时间:2011-03-07 20:02:43

标签: java methods parameters

是否可以根据布尔值在函数中插入参数?

例如,我有这段代码:

Math.min(boolA ? doubleValueA, boolB ? doubleValueB);

提前致谢!

4 个答案:

答案 0 :(得分:2)

如果boolAboolB为false,请使用默认值(例如Double.MAX_VALUE):

Math.min(
    (boolA) ? doubleValueA : Double.MAX_VALUE,
    (boolB) ? doubleValueB : Double.MAX_VALUE
);

修改

如果您有要查找最小值的变量列表,但仅当设置了相应的布尔变量时,将列表加载到数组中并找到最小值:

ArrayList<Double> myArray = new ArrayList<Double>();
if (boolA) myArray.add(doubleValueA);
if (boolB) myArray.add(doubleValueB);
// etc

double minValue = Double.MAX_VALUE; // start with largest possible value
// loop through and replace with any smaller values
for (double val : myArray)
    if (val < minValue) minValue = val;
// val now contains the smallest value

修改2

这也可以应用于其他功能。有选择地将参数添加到数组中,并将数组传递给函数。如果您可以控制函数定义,则可以使用variable arguments使其更简单。

public double MyMin(double... myArray) {
    double minValue = Double.MAX_VALUE; // start with largest possible value
    // loop through and replace with any smaller values
    for (double val : myArray)
        if (val < minValue) minValue = val;
    // val now contains the smallest value
    return val;
}

答案 1 :(得分:1)

java没有类似

的运算符
boolA ? doubleValueA

但支持ternary operator

boolA ? doubleValueA : defaultValue

这意味着如果boolA为真,则使用doubleValueA,否则使用defaultValue。否则

Math.min(boolA ? doubleValueA, boolB ? doubleValueB);
如果boolA为false,则

将毫无意义(除了特殊处理,在这种情况下使用null,但Java不会)

总而言之,你应该改为

Math.min(boolA ? doubleValueA : defaultA, boolB ? doubleValueB : defaultB);

答案 2 :(得分:0)

如果您使用的是三元运算符,则需要一个错误的条件。假设您要确保如果boolA为false,则doubleValueB将为min,而如果boolB为false,则doubleValueA将为min。您可以将其他条件设为最大整数,然后就是这种情况。

当然如果boolA和boolB都为假,那么你的值将是最大整数值。如果可能发生这种情况,那么您将需要额外的代码来处理它。

Math.min(boolA ? doubleValueA : Integer.MAX_VALUE, boolB ? doubleValueB : Integer.MAX_VALUE);

请注意,Math.min(int, int)不接受varargs。如果你想使用here描述的可变长度参数列表,你需要你自己的min函数和varargs。

答案 3 :(得分:0)

if(boolA && boolB) {
    Math.min(doubleA, doubleB);
} else if(boolA) {
    doubleA;
} else if(boolB) {
    doubleB;
} else {
    ????
}