2011-03-07 96 views
0

根據布爾值是否可以在函數中插入參數?根據布爾值插入參數

例如,我有這樣的一段代碼:

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

提前感謝!

+0

你期望什麼,例如如果boolA = false? – Howard 2011-03-07 20:04:26

+0

例如,如果'boolA'爲false,參數是什麼? – mellamokb 2011-03-07 20:04:43

+2

他在找可變參數嗎? – 2011-03-07 20:06:08

回答

2

使用默認值(如Double.MAX_VALUE)如果boolAboolB是假的:

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; 
} 
+0

謝謝,你的第一個命題是我在找什麼。 ArrayList實現看起來很有希望,可以用於其他項目。 – EthanM 2011-03-07 20:14:02

0

如果您使用三元運算符,則需要假條件。假設你想確保如果boolA爲false,則doubleValueB將爲min,而如果boolB爲false doubleValueA將爲min。你可以使其他條件成爲最大整數,然後就是這樣。

當然,如果boolA和boolB都爲false,那麼您的值將是最大整數值。如果這種情況發生,那麼你需要額外的代碼來處理它。

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

注意Math.min(int, int)不帶可變參數。如果你想用here中描述的可變長度參數列表,你需要用你自己的min函數和可變參數。

1

Java沒有像操作

boolA ? doubleValueA 

但支持ternary operator

boolA ? doubleValueA : defaultValue 

這意味着如果boolA是真的,那麼使用doubleValueA以其它方式使用defaultValue。否則

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

是毫無意義的,如果boolA是假的(除特殊處理,在這種情況下,與null去,但Java沒有)

完全,你應該改變

Math.min(boolA ? doubleValueA : defaultA, boolB ? doubleValueB : defaultB); 
0
if(boolA && boolB) { 
    Math.min(doubleA, doubleB); 
} else if(boolA) { 
    doubleA; 
} else if(boolB) { 
    doubleB; 
} else { 
    ???? 
} 
+0

的確如此,儘管我最初想要寫一個更緊湊的方式。這就是我開始的。雖然謝謝! – EthanM 2011-03-07 20:16:10