[英]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.