문제

나는 배열에서 뚜렷한 숫자를 인쇄하는 작은 프로그램을 작성하려고합니다. 예를 들어 사용자가 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;
}
}
도움이 되었습니까?

해결책

우선, "else if"진술은 IF에 어떤 조건도 제공하지 않기 때문에 문장이 올바르지 않습니다 (IF를 원할 경우 작성해야합니다."if (condition) ...").

둘째, 결정할 수 없습니다 내부 내부 루프, 값을 인쇄 해야하는 경우 : 코드가 작동하는 방식으로 값 배열을 작성합니다 [I 각 값 배열에 대해 [J 배열과 다릅니다 [i]!

셋째 : 내부 루프는 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 더 큰 배열의 경우 훨씬 더 효율적일 것입니다 ...


편집 : 물론, 마이어스 (의견 참조) CheckDuplicate() 값을 반환하지 않으면 반환 유형이 있어야합니다. void (대신에 int). 위 코드에서 이것을 수정했습니다 ...

다른 팁

가장 간단한 방법은 모든 요소를 Set<Integer> 그런 다음 내용을 인쇄합니다 Set.

삽입 시간으로 순서대로 설정 한 다음 필요한 경우 배열로 다시 변환하십시오.

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

모든 정수를 세트에 던지십시오. 복제물은 세트에 추가되지 않으며 고유 한 정수 세트가 남아 있습니다.

팩트 컬렉션 방법으로 인해 Java Collection API를 사용하여 원하는 것은 Java Collection API를 사용하여 달성 할 수 있습니다. Object프리미티브가 아닙니다. J2SE에는 변환하는 방법이 없습니다. int[] 에게 Integer[], 그러나 아파치 커먼즈 랭 도서관 그런 유용한 방법이 포함되어 있습니다 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()]));
}

응용 프로그램에 더 많은 배열/컬렉션 조작이 포함될 가능성이있는 경우 처음부터 물건을 구현하는 대신 해당 라이브러리를 살펴 보는 것이 좋습니다. 그러나 학습 목적으로하고 있다면 코드를 멀리하십시오!

각 숫자를 세트 배열이 아닌 구현. 세트는 특히 중복을 걸러 내려는 요소 모음을 저장하기위한 것입니다.

다른 사람들이 제안한대로 세트를 사용하거나 호환 가능한 클래스를 사용하십시오. 호환 클래스 목록에서는 포함 된 메소드를 사용하여 배열에 이미 존재하는지 확인하십시오.

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]);
        }
    }
}

}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top