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