2013-03-06 4 views
-3

이 코드의 문제점은 단지 5,9 대신 5 9 9를 인쇄한다는 것입니다. 배열에 세 번째 9가 있기 때문입니다. 내가 뭘 놓치고 있니?배열의 중복 번호 찾기

편집 : 제공된 배열에서 중복을 가져올 함수를 작성해야합니다. 나는 이것을하려고 노력하고있다. 그러나 그것은 5,9 대신 5,9,9를 인쇄하고있다.

편집 2 : 글쎄, HashSet을 읽고 나서 알아 냈고 아래 코드를 사용하여 작동하게 만들었습니다. 나는 이것이 동일한 문제를 가진 다른 사람들을 도울 수 있기를 바랍니다.

import java.util.HashSet; 


public class Duplicator { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 

    int[] a = {3,5,5,8,9,9,9}; 

    HashSet<Integer> hash = new HashSet<Integer>(); 

    for(int i = 0; i < a.length; i++){ 

     for(int j = i+1; j< a.length; j++){ 

      if(a[i] == a[j]){ 

       hash.add(a[i]); 

      } 
     } 


    } 

    System.out.println(hash); 

    } 
} 
+0

문제는 여기에 아담 무엇인가

또한 설정을 사용할 수 있습니까? – kuriouscoder

+0

화면의 오른쪽에있는 많은 부분이 중복되어 도움이 될 것입니다. –

+0

더 좋은 방법이 있습니다. 이 코드는 O (n^2) 최악의 경우가 걸릴 것 같습니다. 그건 좋지 않아. O (n) 시간에 롤링 세트를 유지하고 배열을 진행할 때 체크 할 수 있습니다. 또한 항상 정렬 될 경우 추가 데이터 구조없이이 작업을 수행 할 수 있으며 O (n)은 그대로 유지하면서 이전 색인을 추적하면됩니다. – Franklin

답변

0

마지막 요소가 어떤 값인지 추적하면서 배열을 진행하십시오.

값이 변경된 경우 부울 duplicateFound을 false로 설정하십시오.

값이 변경되지 않았고 duplicateFound이 거짓이면 duplicateFound을 true로 설정하고 인쇄하십시오.

정렬되지 않은 배열을 먼저 정렬해야합니다.

-1

질문에 대해 명확하지 않습니다. 중복을 제거 할 필요가 있다면 입력 배열의 크기에 따라 간단한 방법을 사용하여 java.util.Set을 만들고이를 반복 할 수 있습니다.

+0

분명히 숙제 문제입니다. 그렇지 않으면 대답이 적절할 것입니다. – Patashu

+2

질문에 분명하지 않으면 그렇다면 이것은 대답이 아닙니다 ... –

0

중복 값을 피하기 위해 세트를 사용할 수 있습니다. 예를 들어 :

Set<Integer> values=new HashSet<Integer>(); 
values.add(5); 
values.add(9); 
values.add(9); 
for(Integer val: values) { 
System.out.println(val); 
} 

그것은 인쇄 :

5 
9 

또 다른 예 :

int[] a = {3,5,5,8,9,9,9}; 
List<Integer> list=new ArrayList<Integer>(); 
for(int i=0; i<a.length; i++) { 
if(!list.contains(a[i])) { 
list.add(a[i]); 
} 

} 

for(int index=0; index<list.size(); index++) { 
System.out.println(list.get(index));// prints the value in the corresponding index. 
} 

그것은 다음 인쇄되는대로 :

3 
5 
8 
9 
2

당신은 번호를 찾기 위해 노력하는 사람 중복되지만 실제로는 이전의 요소와 비교해 보면, 이전의 요소와 비교할 때마다 숫자가 인쇄됩니다. 따라서 숫자가 5, 9, 9를 의미하는 앞에 오는 번호와 동일 할 때마다 인쇄합니다.

인쇄 할 마지막 요소를 추적하는 변수를 추가 할 수 있습니다 . 배열이 정렬되지 않으면 코드가 여전히 손상됩니다.

public static void main(String[] args) { 
    int[] a = {3,5,5,8,9,9,9}; 

    Set<Integer> encounteredNumbers = new HashSet<Integer>(); 
    Set<Integer> duplicateNumbers = new LinkedHashSet<Integer>(); // LinkedHashSet to keep in same order as encountered. 
    for (int i : a) { 
    if (encounteredNumbers.contains(i)) { 
     duplicateNumbers.add(i); 
    } 
    encounteredNumbers.add(i); 
    } 

    System.out.println(duplicateNumbers); 
}