2009-03-23 24 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]を書きます[私]!

第3に、内側のループは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のいくつかの種類が大きな配列のためにはるかに効率的である...


EDIT:もちろん、 は値を返さないので、返すタイプはvoidintではなく)である必要があります。私は上記のコードでこれを修正しました...

+1

Aw MAN!私はちょうど15分を適切な答えを書いて過ごしました。そして、私はそれを掲示する前に、あなたはほぼ一言の重複を伴​​います!今私はあなたに+1を与える義務があります。 –

+0

ああ、私が言いましたが、あなたはしなかったことがあります。メソッドに戻り値はありません。問題のステートメントから、私はそれがvoidを返すべきだと推測しています。 –

10

最も簡単な方法は、Set<Integer>へのすべての要素を追加してからちょうどSetの内容を印刷することです。

2

すべての整数をセットに投げ込んでみてください。 DuplicatesがSetに追加されることはなく、一意の整数が残されます。

1

配列ではなくの実装に各番号を追加する方がいいでしょう。セットは、特に重複を除外したい要素のコレクションを格納するためのものです。

3

挿入時間順に並べて入れ、必要に応じて配列に戻します。まず

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

私はこれを2回投票することができたらいいと思います。 ;) –

2

JavaコレクションAPIを使用して実行できますが、ファクトコレクションメソッドはObjectで動作し、プリミティブでは機能しないため、正確には1ライナーではありません。 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]); 
     } 
    } 
} 

}

関連する問題