2011-04-09 6 views
2

값과 배열을 취하여 중복 된 메서드를 작성했습니다. 예를 들어 두 개의 값이 같은 값을 갖는 것과 같은 중복 값이있는 경우 2로 그 값을 곱합니다. 두 값의 값이 같으면이 값을 3으로 배가합니다.이 값은 7 개의 값이 같아 질 때까지 계속됩니다. 이 값을 7 배로 늘릴 것입니다.배열에서 중복 찾기

이것은 내 소스 코드입니다.

public static double calculateWinnings(int[]numbers) 

    { 
     double total = 0; 
     for (int i = 0; i < numbers.length - 1; i++) 
     { 
      for (int j = i + 1; j < numbers.length; j++) 
      { 
       if(numbers[i] == numbers[j]) 
       { 
        total = numbers[i] * .01; 
        System.out.println("Total is " + total); 
        return total; 
       } 
      } 
     } 
     return total; 

    } 
+0

당신이 쓰는 언어는 무엇입니까? 나는 당신이 맨 위에 "public static"을 사용했기 때문에 자바라고 가정하고 있습니다 ... 음 ... – alexy13

+0

자바입니다. 이것은 하루 종일 저를 당황하게하고 있습니다! –

+0

나는 너의 노력에 대해 아직도 조금 혼란 스럽다. 나는 내 논리를 사용하고있다. 아마도 나의 오해 일 것이다. – alexy13

답변

1

주문이 중요하지 않은 경우 먼저 정렬하고 분석해야합니다.

정렬은 동일한 값을 서로에 배치하여 for 루프에서 더 쉽게 알 수 있습니다.

Java Collections 클래스도 여기에서 사용할 수 있습니다.

먼저 정렬하고 루프를 사용하지 않으려면, 당신은 컬렉션 클래스에서의 HashMap를 사용할 수 있습니다, 예를 예를 들어 http://download.oracle.com/javase/tutorial/collections/intro/index.html

를 참조하십시오. 지금

HashMap<Integer, Integer> counts = new HashMap<Integer, Integer>(); 
for(int i=0; i < numbers.length; ++i){ 
    Integer before = counts.get(numbers[i]); 
    if (before == null) before=0; 
    counts.put(numbers[i], before+1); 
} 

나중에 당신이 있음을 일으킨 번호를보고 다시 해시를 통해 최대 수를 다음 루프를 찾을 최대 (counts.valueSet()) 같은 것을 사용할 수 있습니다 카운트의 숫자에서 매퍼가 . 당신이 인덱스 1, 4, 6에 같은 값이있는 경우

0

, 당신은 그래서

i j conclusion 
-------------- 
1 4 2 values 
1 6 3 values 
4 6 4 values // oops! already counted 

과 그들을 찾을 수 있습니다. 그럼 당신은 것 -하지만 첫 번째 히트에 반환하기 때문에, 더 so on 없다 :

if(numbers[i] == numbers[j]) 
    { 
     total = numbers[i] * .01; 
     System.out.println("Total is " + total); 
     return total; // oops! 
    } 

당신이 break을 의미합니까?

0

일부 입력 및 출력을 제공해야합니다. 정확히 예상되는 출력이 명확하지 않습니다. 가장 중복 된 것을 찾은 다음 그 숫자에 나타나는 빈도를 곱하면됩니까? 예 :

1 2 5 5 5 7 8 8 = three 5's = 15  

또는 합계가 16이기 때문에 2 개의 8 승을 얻었습니까? 아니면 모든 복제본을 합산 할 예정입니까?

int[] counts = new int[MAX_NUM]; 
for (int i = 0; i < numbers.length; i++) { 
    counts[numbers[i]]++; 
} 

지금 각 숫자의 수를 가지고 : MAX_NUM 당신이 배열에 기대하는 가장 높은 번호입니다 어떤 경우에는 내가이 시작 것입니다. 당신이 가장 높은 카운트 수를 찾고 있다면 :

int num = 0; 
int best = 0; 
for (int i = 0; i < counts.length; i++) { 
    if (counts[i] > best) { 
     num = i; 
     best = counts[i]; 
    } 
} 

지금 num * best 내 예를 들어 15 것이다. 현재 num에는 가장 많이 발생하는 번호가 포함되고 best은 해당 번호가됩니다. 동일한 카운트를 가진 두 개의 숫자가 있다면 높은 숫자가 이깁니다.
int max = 0; 
for (int i = 0; i < counts.length; i++) { 
    max = Math.max(i * counts[i], max); 
} 

지금 max 16 것이다 : 두 팔은 이제 더 큰 금액을 가지고 있기 때문에 아마도 내 예제하지만 당신은 16 대신 15을 원하고.