是否可以根据布尔值在函数中插入参数?
例如,我有这段代码:
Math.min(boolA ? doubleValueA, boolB ? doubleValueB);
提前致谢!
答案 0 :(得分:2)
如果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
这也可以应用于其他功能。有选择地将参数添加到数组中,并将数组传递给函数。如果您可以控制函数定义,则可以使用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
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 {
????
}