2011-03-07 7 views
0

부울 값에 따라 함수에 매개 변수를 삽입 할 수 있습니까? 사전에부울 값에 따라 매개 변수 삽입

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

감사 :

예를 들어, 나는이 코드 조각이!

+0

예를 들어 무엇을 기대하십니까? boolA = false이면? – Howard

+0

'boolA'가 false 인 경우 매개 변수는 어떻게됩니까? – mellamokb

+2

그는 varargs를 찾고 있습니까? –

답변

2

(예 : 만들어 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

0

삼항 연산자를 사용하는 경우 거짓 조건이 필요합니다. boolA가 false이면 doubleValueB가 min이되고 boolB가 false이면 doubleValueA가 min이되는지 확인하려고한다고 가정 해보십시오. 당신은 다른 조건을 최대 정수로 만들 수 있습니다.

물론 boolA와 boolB가 모두 false이면 값은 최대 정수 값이됩니다. 그런 일이 발생할 수 있다면,이를 처리하기 위해 추가 코드가 필요합니다. 가변 인자를 고려하지 않습니다 Math.min(int, int) 것을

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

참고. 설명 된 가변 길이 인수 목록을 사용하려면 here에 varargs와 함께 min 함수가 필요합니다. 당신이 최소 찾으려 변수의 목록이있는 경우

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

편집

: boolA 또는 boolB이 false 인 경우

1

자바

boolA ? doubleValueA 

같은 연산자를 가지고 있지만 boolA에 해당하는 경우, 다음, 그렇지 않으면 defaultValue를 사용 doubleValueA를 사용하는 것을 의미한다 ternary operator

boolA ? doubleValueA : defaultValue 

지원하지 않습니다. boolA이 거짓 (특수 처리를 위해이 경우 null로가는 제외하고 있지만, 자바는하지 않습니다)

모두 그렇지 않으면

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

가 무의미, 당신은 변경해야

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

관련 문제