2013-03-30 4 views
4

2 개 이상의 정수를 허용하고 가장 큰 정수를 출력하는 코드가 필요합니다. Math.MAX을 사용했는데, 문제는 기본적으로 2 개의 정수만 받아 들여서 모든 int를 출력 할 수 없다는 것입니다. 그래서 이것을 다음과 같이 만들어야했습니다.최대 2 개 이상의 숫자를 찾는 더 편리한 방법은 무엇입니까?

int max = Math.max(a, Math.max(b, Math.max(c, Math.max(d, e)))); 

더 좋은 방법이 있습니까?

+1

항상 모든 관련 코드가 포함 **를 * *, 그냥 연결하지 마십시오. 이유 : meta.stackoverflow.com/questions/118392/add-stack-overfow-faq-entry-or-similar-for-ting-code-in-the-question –

+0

http : //에서 볼 수있는 것처럼 비트 연산자를 사용해보십시오. //stackoverflow.com/questions/4799287/maximum-of-two-number-in-c-using-bitwise-operators – user1929959

+0

@ user1929959 : 왜 그렇게할까요? 나에게 훨씬 덜 읽을 수있는 솔루션처럼 들립니다. –

답변

6

당신은 varargs 사용할 수 있습니다 또는

public static Integer max(Integer... vals) { 
    Integer ret = null; 
    for (Integer val : vals) { 
     if (ret == null || (val != null && val > ret)) { 
      ret = val; 
     } 
    } 
    return ret; 
} 

public static void main(String args[]) { 
    System.out.println(max(1, 2, 3, 4, 0, -1)); 
} 

:

public static int max(int first, int... rest) { 
    int ret = first; 
    for (int val : rest) { 
     ret = Math.max(ret, val); 
    } 
    return ret; 
} 
+0

나는 이것이 실제로 무엇을하는지 이해할 수 없다. 설명해 주시겠습니까? –

+8

아마 5 초 이상을보고 이해하려고 노력할 것입니다. –

+0

'int'보다는'Integer'를 사용해야하는 이유는 무엇입니까? –

1

당신은 간단한 루프를 사용할 수 있습니다 : 질문 자체

public Integer max(final Collection<Integer> ints) { 
    Integer max = Integer.MIN_VALUE; 
    for (Integer integer : ints) { 
     max = Math.max(max, integer); 
    } 
    return max; 
} 
+0

http://stackoverflow.com/a/9303923/14731에서 설명했듯이 Integer.MIN_VALUE 대신 Integer.NEGATIVE_INFINITY를 사용해야합니다 : Double.MIN_VALUE은 "double 타입의 양수가 0이 아닌 양수 값"을 반환합니다. 가장 큰 0이 아닌 0에 가장 가까운 숫자입니다. 대신에,'Double.NEGATIVE_INFINITY' 또는'-Double.MAX_VALUE'와 같은 것을 사용할 수 있습니다. – Gili

+1

@Gili No.'Double.MIN_VALUE'은 ** 매우 ** Integer.MIN_VALUE와 다릅니다 **. 'Integer.NEGATIVE_INFINITY'은 존재하지 않습니다. 귀하의 의견이 잘못되었습니다 - 게시하기 전에 설명서를 읽으십시오. –

+0

사과, 네 말이 맞아. – Gili

관련 문제