繁体   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