簡體   English   中英

查找不重復的數字

[英]Find non-repeating numbers

我正在嘗試在數組中查找非重復數字並將這些數字打印到新數組中。 它有點工作,但由於某種原因打印了兩次一個數字,我不明白為什么。 輸出應該是 4 和 7,但它打印 4 4 7。

import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
public class Frequence {
    public static void main(String[] args) {
        int[] array = new int[]
                {
                        1, 2, 3, 2, 3, 3, 5, 4, 7, 1, 5
                };
        List<Integer> arr = new ArrayList<>();
        for (int value : array) {
            int count = 0;
            for (int i : array)
                if (value == i)
                    count++;
            if (count == 1) {
                arr.add(value);
                Integer[] arr2 = new Integer[arr.size()];
                arr2 = arr.toArray(arr2);
                for (Integer k : arr2)
                    System.out.println(k);
            }
        }
    }
}

由於您使用的是List<>您可能會考慮使用Set<> 由於設置值不包含重復項並且它們的值是散列的,因此它們適合這種類型的操作。

以下適用於單個循環:

  • 首先將值添加到nonDups集。
  • 現在把它添加到found集。 如果該值已在該集合中,則它位於較早的位置並返回 false。 因此它必須是重復的,因此將其從nonDups刪除。
  • 繼續,直到處理完所有值。
Set<Integer> nonDups = new HashSet<>();
Set<Integer> found = new HashSet<>();
for (int k : array) {
    nonDups.add(k);
    if (!found.add(k)) { // returns false if already present
        nonDups.remove(k);
    }
}

System.out.println(nonDups);

印刷

[4,7]

每次找到唯一元素時,您的打印循環都會打印整個 arr,因此它應該在for (int value : array)循環之外:

for (int value : array) {
    // ...
    if (count == 1) {
        arr.add(value);
    }
}

for (Integer k : arr) {
    System.out.println(k);
}

UPD:查找數組唯一元素的最簡單方法是使用Set集合。 整個任務可以用一個Set<Integer> uniques = new HashSet(Arrays.asList(array));解決: Set<Integer> uniques = new HashSet(Arrays.asList(array));

或者,如果您對不可修改的集合沒問題並使用 Java 9+: Set<Integer> uniques = Set.of(array);

我簡化了你的代碼,問題是你在第一個循環中打印:

int[] array = new int[] { 1, 2, 3, 2, 3, 3, 5, 4, 7, 1, 5 };
List<Integer> arr = new ArrayList<>();

for (int i = 0; i < array.length; i++) {
    int count = 0;
    for (int j = 0; j < array.length; j++) {
        if(array[i] == array[j]) {
            count++;
        }
    }
    if(count == 1) {
        arr.add(array[i]);
    }
}
System.out.println(arr.toString());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM