-3

このコードの問題は、5,9 ではなく 5 9 9 が出力されることです。配列に 3 番目の 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);

    }
}
4

4 に答える 4

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);
}
于 2013-03-06T02:47:46.757 に答える
0

最後の要素の値を追跡しながら、配列を進めてみてください。

値が変更された場合は、ブール値duplicateFoundを false に設定します。

値が変更されておらず、duplicateFoundfalse の場合は、true に設定duplicateFoundして出力します。

また、配列がソートされていない可能性がある場合は、必ず最初に配列をソートしてください。

于 2013-03-06T02:42:23.570 に答える
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
于 2013-03-06T02:45:31.013 に答える
-1

私は質問について明確ではありません。重複を排除する必要がある場合、入力配列のサイズに応じた簡単な方法は、 a を作成しjava.util.Setて反復処理することです。

于 2013-03-06T02:43:27.237 に答える