[英]Insert parameter depending on boolean value
是否可以根据布尔值在函数中插入参数?
例如,我有这段代码:
Math.min(boolA ? doubleValueA, boolB ? doubleValueB);
提前致谢!
如果boolA
或boolB
为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.