我正在尝试使用for each
循环在一个d数组中打印重复的元素。但是我的输出是意外的。谁能帮忙吗?
package Login;
public class DupsArray {
static int[] a = {1,2,3,3};
public static void main(String[] args) {
int length = a.length;
for(int i=0;i<=length-1;i++) {
for(int j : a) {
for(j=1;j<=length-1;j++) {
if(a[i]==(a[j]) ) {
System.out.println("Found duplicate");
} else {
System.out.println("No duplicates found");
}
}
}
}
}
结果如下:
发现预期的打印结果是重复的。
答案 0 :(得分:1)
您可以像这样使用Sets:
Integer[] a = {1, 2, 3, 3, 5, 5, 7, 8, 7};
Set<Integer> duplicatesSet = new HashSet<>();
Set<Integer> helperSet = new HashSet<>();
for (Integer element : a) {
if (!helperSet.add(element)) { // NOTE*
System.out.println("Duplicate found : " + element);
duplicatesSet.add(element);
}
}
然后,您可以对重复项进行任何操作
for(Integer el : duplicatesSet){
System.out.println(el);
}
注意*
根据javadocs:
boolean add(E e);
将指定的元素添加到该集中(如果尚不存在)
如果此集合尚未包含指定的元素,则返回true
通过这种方式,我们可以知道该元素是否已经在集合中,如果可以的话,可以将其添加到副本中。
答案 1 :(得分:1)
我们可以做这样的事情
Integer[] arr = {1, 2, 3, 3, 5, 5, 7, 8, 7};
Set<Integer> set = new HashSet<Integer>();
for (Integer i : arr) {
if (set.add(i) == false)
{
System.out.println(i);
}
}
答案 2 :(得分:0)
尝试使用下面的逻辑将数组中的每个元素与所有其他元素进行比较,如果发现重复,它将停止执行以继续执行
for(int i = 0; i < a.length;i++) {
for (int j = i + 1 ; j < a.length; j++) {
if (a[i] == a[j]) {
System.out.println("Found duplicate");
return;
}
}
}
System.out.println("No duplicate Found");
答案 3 :(得分:0)
尝试此操作并根据您的要求进行更新
public class Main{
public static void main(String[] args) {
int[] ar = new int[] {1, 1, 3, 3, 4, 5, 7, 8};
int size = ar.length;
int error = 0;
for(int i = 0; i < size; i++){
for(int j = i+1; j < size; j++){
if(ar[i] == ar[j]){
if(i != j){
error = error + 1;
System.out.println("dulicate element " + j);
}
}
}
}
System.out.println("total number of duplicate element " + error);
}
}