簡體   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