[英]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.