Java 根据布尔值插入参数

Java 根据布尔值插入参数,java,methods,parameters,Java,Methods,Parameters,是否可以根据布尔值在函数中插入参数 例如,我有一段代码: Math.min(boolA ? doubleValueA, boolB ? doubleValueB); 提前谢谢 如果使用三元运算符,则需要一个假条件。假设您希望确保如果boolA为false,则doubleValueB将为最小值,而如果boolB为false,则doubleValueA将为最小值。您可以将其他条件设置为最大整数,然后就是这种情况 当然,如果boolA和boolB都为false,那么您的值将是最大整数值。如果这可能发

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

例如,我有一段代码:

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

提前谢谢

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

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

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

注意,这不需要varargs。如果您想使用如上所述的可变长度参数列表,您需要自己的带有varargs的min函数。

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

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

Math.min(boolA ? doubleValueA : Integer.MAX_VALUE, boolB ? doubleValueB : Integer.MAX_VALUE);
注意,这不需要varargs。如果要使用所述的可变长度参数列表,则需要使用自己的带有varargs的最小函数。

如果
boolA
boolB
为false,则使用默认值(例如Double.MAX_值):

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
ArrayList myArray=new ArrayList();
if(boolA)myArray.add(doubleValueA);
if(boolB)myArray.add(doubleValueB);
//等
双最小值=双最大值;//从可能的最大值开始
//循环并替换为任何较小的值
for(双val:myArray)
如果(val
编辑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;
}
public double MyMin(double…myArray){
double minValue=double.MAX_VALUE;//从可能的最大值开始
//循环并替换为任何较小的值
for(双val:myArray)
如果(val
如果
boolA
boolB
为false,则使用默认值(例如Double.MAX_值):

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
ArrayList myArray=new ArrayList();
if(boolA)myArray.add(doubleValueA);
if(boolB)myArray.add(doubleValueB);
//等
双最小值=双最大值;//从可能的最大值开始
//循环并替换为任何较小的值
for(双val:myArray)
如果(val
编辑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;
}
public double MyMin(double…myArray){
double minValue=double.MAX_VALUE;//从可能的最大值开始
//循环并替换为任何较小的值
for(双val:myArray)
如果(val
java没有类似运算符的

boolA ? doubleValueA
但支持

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

Math.min(boolA ? doubleValueA, boolB ? doubleValueB);
如果
boolA
为false,则没有意义(除了特殊处理和在本例中使用
null
,但Java没有)

总之,你应该改成

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

java没有类似于运算符的

boolA ? doubleValueA
但支持

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

Math.min(boolA ? doubleValueA, boolB ? doubleValueB);
如果
boolA
为false,则没有意义(除了特殊处理和在本例中使用
null
,但Java没有)

总之,你应该改成

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

例如,如果boolA=false,您期望得到什么?例如,如果
boolA
为false,参数将是什么?我不需要担心所有布尔值都为false。如果其中一个值为false,则相应的双精度值不应是函数中的参数。@Etham:除了您正在使用的示例(
Math.min
)正好包含两个参数之外。在这种情况下,不能有选择地省略参数。@mellamokb我明白了。我错误地认为Math.min函数可能有“无限”参数。例如,如果boolA=false,您期望得到什么?例如,如果
boolA
为false,参数将是什么?我不需要担心所有布尔值都为false。如果其中一个值为false,则相应的双精度值不应是函数中的参数。@Etham:除了您正在使用的示例(
Math.min
)正好包含两个参数之外。在这种情况下,不能有选择地省略参数。@mellamokb我明白了。我错误地认为Math.min函数可以有“无限”参数。谢谢,你的第一个命题不知怎的正是我想要的。ArrayList实现看起来很有希望,可能会用于其他pr