2009-03-23 9 views
0

배열에 고유 번호를 인쇄하는 작은 프로그램을 작성하려고합니다. 예를 들어 사용자가 1,1,3,5,7,4,3을 입력하면 프로그램은 1,3,5,7,4만을 출력합니다.배열의 고유 정수 인쇄

checkDuplicate 라인에 오류가 발생합니다.

여기 내 코드는 지금까지의 :

import javax.swing.JOptionPane; 

public static void main(String[] args) { 
    int[] array = new int[10]; 
    for (int i=0; i<array.length;i++) { 
     array[i] = Integer.parseInt(JOptionPane.showInputDialog("Please enter" 
            + "an integer:")); 
    } 
    checkDuplicate (array); 
} 

public static int checkDuplicate(int array []) { 
    for (int i = 0; i < array.length; i++) { 
     boolean found = false; 
     for (int j = 0; j < i; j++) 
      if (array[i] == array[j]) { 
       found = true; 
       break; 
      } 
     if (!found) 
      System.out.println(array[i]); 
    } 
    return 1; 
} 
} 
+0

는 errr ... 문제는 무엇인가? – Brabster

+0

사용자가 10 개의 숫자를 입력 할 수 있기를 원합니다. 그 수는 배열에 추가됩니다. 그런 다음 중복 된 숫자를 제외하고 사용자가 입력 한 모든 숫자를 인쇄합니다. –

+0

@unknown : 변경된 코드로 더 이상 진짜 질문이 없습니다. 당신은 최고 대답을 쓸모 없게 만들었습니다. 참조를 위해 질문을 롤백 하시겠습니까? 원하는 경우 새로운 개선 된 코드로 끝 부분을 추가 할 수 있습니다. –

답변

4

은 "else if"당신이 만약 (당신이 원하는 경우 당신은 "if (condition) ..."를 작성해야, 경우)에 대한 조건을 제공하지 않기 때문에 문이 올바르지 않습니다. 값을 인쇄해야하는 경우

둘째, 당신은 내부 루프 내에서 를 결정할 수 없습니다 : 코드가 작동하는 방법은 당신이 배열에서 다른 값 배열을 각 값의 배열 [i]를 [J] 쓰기 [나는]!

세 번째 : 내부 루프는 0에서 외부 인덱스로 이동해야합니다. i-1 : 각 요소에 대해 첫 번째 발생 인 경우에만 결정하면됩니다 (예 : 이전 인덱스에서 동일한 값이 발생했는지 여부).). 그렇다면 그것을 인쇄하고, 그렇지 않다면 무시하십시오.

CheckDuplicate()의 적절한 구현은 다음과 같습니다

public static void checkDuplicate(int array []) { 
    for (int i = 0; i < array.length; i++) { 
    boolean found = false; 
    for (int j = 0; j < i; j++) 
     if (array[i] == array[j]) { 
     found = true; 
     break; 
     } 
    if (!found) 
     System.out.println(array[i]); 
    } 
} 

그러나 물론

Set 어떤 종류의 더 큰 어레이에 대한 훨씬 더 효율적이 될 것입니다 ...


편집 : 물론, mmyers (의견 참조)은 CheckDuplicate()이 (가) void (int 대신) 인 반환 유형이어야합니다. 위 코드에서이 문제를 해결했습니다 ...

+1

Aw MAN! 나는 방금 15 분 동안 적절한 대답을 쓰는 데 썼다. 그리고 나는 그것을 게시 할 수 있기 전에 거의 한 마디로 된 단어와 함께 나온다! 이제 나는 당신에게 +1을 줄 의무가 있습니다. –

+0

아, 제가 언급 한 것이 하나 있습니다 만, 당신은하지 않았습니다 : 메소드에 반환 값이 없습니다. 문제 진술서에서 나는 그것이 무효를 반환해야한다고 생각하고 있습니다. –

10

가장 간단한 방법은 Set<Integer>에 모든 요소를 ​​추가 한 다음 바로 Set의 내용을 인쇄하는 것입니다.

2

모든 정수를 하나의 세트로 던집니다. Duplicates는 Set에 추가되지 않으며 고유 한 정수가 남습니다.

1

각 번호를 배열이 아닌 Set 구현에 추가하는 것이 좋습니다. 세트는 특별히 중복을 필터링하려는 요소의 콜렉션을 저장하기위한 것입니다.

3

삽입 시간순으로 정렬 된 세트에 넣은 다음 필요한 경우 다시 배열로 변환하십시오. 우선

new LinkedHashSet<Integer>(array).toArray() 
+0

두 번이나 투표 할 수 있기를 바랍니다. ;) –

2

Java 컬렉션 API를 사용하여 수행 할 수 있지만 사실 수집 방법이 Object과 함께 작동하고 프리미티브가 아니기 때문에 원 - 라이너와 정확히 일치하지는 않습니다. J2SE에는 int[]Integer[]으로 변환하는 방법이 없지만 Apache Commons Lang library에는 ArrayUtils.toObject()ArrayUtils.toPrimitive()과 같은 유용한 메소드가 들어 있습니다.응용 프로그램이 배열/수집 조작을 더 포함 할 가능성이

public static int[] removeDuplicates(int... array) { 
    Integer[] ints = ArrayUtils.toObject(array); 
    Set<Integer> set = new LinkedHashSet<Integer>(Arrays.asList(ints)); 
    return ArrayUtils.toPrimitive(set.toArray(new Integer[set.size()])); 
} 

경우에, 나는 당신이 그 살펴 보시기 바랍니다 : 정수 배열에서 중복 요소를 제거하는 방법을 사용

이 같이 보입니다 라이브러리, 처음부터 다시 구현하는 대신. 하지만 학습 목적으로 코드를 작성하면 코드를 작성하십시오.

1

다른 사람들이 List 호환 가능 클래스를 제안하거나 사용함에 따라 Set을 사용하십시오. 목록 호환 클래스를 사용하면 Contains 메서드를 사용하여 배열에 이미 있는지 확인할 수 있습니다.

0

import java.util.Scanner; 공용 클래스 PrintDistinctNumbers {

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    int [] numberArray = createArray(); 
    System.out.println("The number u entered are: "); 
    displayArray(numberArray); 
    getDistinctNumbers(numberArray); 
} 

public static int[] createArray() { 
    Scanner input = new Scanner(System.in); 
    int [] numberCollection = new int [10]; 
    System.out.println("Enter 10 numbers"); 

    for(int i = 0; i < numberCollection.length; i++){ 
     numberCollection[i] = input.nextInt(); 
    } 
    return numberCollection; 

} 

public static void displayArray(int[] numberArray) { 
    for(int i = 0; i < numberArray.length; i++){ 
     System.out.print(numberArray[i]+" "); 
    } 
} 

public static void getDistinctNumbers(int[] numberArray) { 
    boolean isDistinct = true; 
    int temp = 0; 
    int [] distinctArrayNumbers = new int [10]; 
    for (int i = 0; i < numberArray.length; i++){ 
     isDistinct = true; 
      temp = numberArray[i]; 

      for(int j = 0; j < distinctArrayNumbers.length; j++){ 
       if(numberArray[i] == distinctArrayNumbers[j]){ 
       isDistinct = false; 
      } 


      } 
      if(isDistinct){ 
        distinctArrayNumbers[temp]=numberArray[i]; 
        temp++; 
       } 


    } 
    displayDistinctArray(distinctArrayNumbers); 
} 

public static void displayDistinctArray(int[] distinctArrayNumbers) { 
    for(int i = 0; i < distinctArrayNumbers.length; i++){ 
     if(distinctArrayNumbers[i] != 0){ 
     System.out.println(distinctArrayNumbers[i]); 
     } 
    } 
} 

}