1

このコードを作成しました。間違っていると思います。

public void display() {
    for (int i = 0; i < tabT.length; i++)
        if (tabT[i] != null)
            for (int j = 0; j <= i; j++)
                if (tabT[i] != tabT[j])
                    System.out.println(tabT[i].getCar());
}

配列に冗長性のない要素を表示するにはどうすればよいですか?

4

6 に答える 6

1

配列のみを使用する場合は、次のように実行できます。

一時(ヘルパー)配列を作成します。これには、これまでに見た各要素が含まれtabTます。次に、値を出力する前に、ヘルパー配列(tmp)に値が表示されていないかどうかを確認します。

たとえば、に値がありtabT、それぞれを複数回印刷したくない場合は、次のようにします。

int[] tabT = {1,2,3,1,1,2,6,7,2,7,1};
int[] tmp = new int[tabT.length];
boolean flag;
for (int i = 0; i < tabT.length; i++) {
    tmp[i] = tabT[i];
    flag = true;
    for (int j = 0; j < tmp.length; j++)
        if (tabT[i] == tmp[j] && i!=j) {
            flag = false;
        }
    if(flag)
        System.out.println(tabT[i]);
}

出力:[1,2,3,6,7]

このアイデアはプログラムに簡単に適用でき、各要素は1回だけ印刷されます。

Cars[] tmp = new Cars[tabT.length]; //Assuming tabT is from type Cars[]
boolean flag = true;
for (int i = 0; i < tabT.length; i++) { 
    tmp[i] = tabT[i];
    if (tabT[i] != null) {
        for (int j = 0; j < tmp.length; j++)
            if (tabT[i].getCar().equals(tabT[j].getCar()) && i!=j)
                flag = false;
        if(flag)
            System.out.println(tabT[i].getCar());
    }
}

これにより、各車(または印刷しているもの)が1回だけ印刷されます。

于 2013-03-11T20:38:54.763 に答える
1

equals()例を介して比較されるオブジェクト

if (!tabT[i].equals(tabT[j]))

オブジェクトではなく参照値を比較しています

for (int i=0; i< tabT.length; i++) {
  boolean f = false;
  for (int j=i+1; j <tabT.length; j++)
    if (tabT[i].equals(tabT[j])) {
      f=true;
      break;
    }
  if (!f)
    System.out.println(tabT[i].getCar());
}

これにより、 と のすべての組み合わせが繰り返されないためijそれらを複数回比較することはありません。

于 2013-03-11T20:33:07.483 に答える
0

tabT配列をセットに入れます。重複するアイテムはありません。

Set tabTList = new HashMap(Listjava.util.Arrays.asList(tabT);
于 2013-03-11T20:29:41.800 に答える
0

このようなことを試してみませんか?(文字列型を扱っていると思います)

HashSet<String> hashSet = new HashSet<String>();

for (int i = 0; i < tabT.length; i++) {
    hashSet.add(tabT[i]);
}

セットに重複を含めることはできないため、セットを反復して一意のものを取得できるようになりました。

java.util.Iterator<String> iterator = hashSet.iterator();

while (iterator.hasNext()) {
    System.out.println((String)iterator.next());
}
于 2013-03-11T20:37:17.310 に答える
0

重複カウントを追跡したい場合は、HashMap を検討できます。配列を 1 回繰り返して、オブジェクトをそれぞれのカウントとともに HashMap に配置します。次に、HashMap と照合して配列を再度確認します。これは、潜在的な O(n^2) とは対照的に、O(n) 時間になります。

于 2013-03-11T20:32:54.647 に答える
0

==!=オブジェクト レベルで等しいかどうかをテストします (つまり、両方のインスタンスが同じかどうか)。必要なのは、各オブジェクトによって表される値を比較することです (たとえば、2 つの文字列が等しい場合)。次に、 かどうかを確認し、実装!tabT[i].equals(tabT[j])の要素を作成する必要があります)。tabTequals

または、配列をセットに変換して、重複を削除します。

T[] tabT = ...
Set<T> set = new LinkedHashSet<T>(Arrays.asList(tabT))
for (T t:set) System.out.println(t);

LinkedHashSet配列内の要素の順序を保持するため、a を使用しました。equalsとを実装する必要があることに注意してくださいhashcode

于 2013-03-11T20:33:24.820 に答える