Как найти повторяющиеся элементы в массиве, используя для каждого цикла - PullRequest
1 голос
/ 03 июня 2019

Я пытаюсь напечатать дубликаты элементов в одном массиве d, используя цикл for each. Но мой вывод был неожиданным. Может ли кто-нибудь помочь, пожалуйста?

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");
                }
            }
        }
    }
}

Результаты показывают следующее:

Ожидаемые результаты для печати найдены дубликаты.

Ответы [ 4 ]

1 голос
/ 03 июня 2019

Вы можете использовать Наборы следующим образом:

  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 голос
/ 03 июня 2019

Мы можем сделать что-то вроде этого

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);
 } 
}
0 голосов
/ 03 июня 2019

попробуйте и обновите согласно вашему требованию

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);
    }
}
0 голосов
/ 03 июня 2019

Попробуйте использовать приведенную ниже логику, которая сравнивает каждый элемент со всеми другими элементами в массиве. Если найден какой-либо дубликат, он останавливает выполнение для продолжения

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...