繁体   English   中英

根据布尔值插入参数

[英]Insert parameter depending on boolean value

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

例如,我有这段代码:

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

提前致谢!

如果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

通常也可以将其应用于其他功能。 有选择地将参数添加到数组,然后将数组传递给函数。 如果可以控制函数定义,则可以使用变量参数使其更简单。

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;
}

Java没有像

boolA ? doubleValueA

但支持三元运算符

boolA ? doubleValueA : defaultValue

这意味着如果boolA为true,则使用doubleValueA否则使用defaultValue 除此以外

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

如果boolA为false,则将毫无意义(在这种情况下,特殊处理和以null进行处理除外,但Java并非如此)

总共,您应该更改为

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

如果使用三元运算符,则需要一个错误条件。 假设您要确保如果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。 如果要使用此处所述的变长参数列表,则需要使用带有varargs的min函数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM