Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55

Посчитать количество элементов в массиве Integer

15.04.2023, 11:21. Показов 1618. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Помогите пожалуйста посчитать количество элементов в массиве не используя HashSet, Map, Set.

А используя только массив и циклы.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
    public void func2() {
        Scanner num = new Scanner(System.in);
        System.out.println("Enter array's lenght: ");
        int size = num.nextInt();
        int[] arr = new int[size];
 
        Set<Integer> duplicates = new HashSet<>();
 
        float avg = 0;
 
        System.out.println("Array's lenght: " + arr.length);
        System.out.println("Enter your grade: ");
        for (int i = 0; i < size; i++) {
            arr[i] = num.nextInt();
        }
 
        int max = arr[0];
        int min = arr[0];
 
        System.out.print("Inserted array's elements: ");
        for (int i = 0; i < size; i++) {
            System.out.print(" " + arr[i]);
            if (max < arr[i])
                max = arr[i];
            if (min > arr[i])
                min = arr[i];
            avg = avg + arr[i];
        }
        System.out.print("\nAverage: " + avg / size + "\nMax: " + max + "\nMin: " + min);
        System.out.println();
        
        int count =0;
        for (int i = 0; i < size; i++) {
            int e1 = arr[i];
            // сравниваем каждый элемент со всеми остальными
            for (int j = 0; j < size; j++) {
                if (i == j) continue; // не проверяем элемент с собой же
                int e2 = arr[j];
                if (e1 == e2) {
                    // дубликат найден, сохраним его
                    duplicates.add(e2);
                    count++;
                    if (count > 0)
                        System.out.printf("%d:%d ", e1, count);
                }
 
            }
 
        }
        // Посчитать сколько раз каждое значение встречается в массиве
        Map<Integer, Integer> counter = new HashMap<>();
        for (int x : arr) {
            int newValue = counter.getOrDefault(x, 0);
            newValue++;
            counter.put(x, newValue);
        }
        System.out.println("Dublicates: " + duplicates);
        System.out.println("Count of array's elements: " + counter);
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2023, 11:21
Ответы с готовыми решениями:

Посчитать количество положительных элементов в массиве integer
1. Ввод x,y Вывод x+y=100(Да/Нет) Через стек по ссылке. Вообще не могу понять как это сделать. Начал что-то...

В заданном массиве чисел найти (посчитать) количество положительных и количество отрицательных элементов
В заданном массиве чисел найти (посчитать) количество положительных и количество отрицательных элементов. Например, задан массив целых...

Посчитать количество повторяющихся элементов в массиве, и каких элементов сколько
Нужно посчитать количество повторяющихся элементов в массиве и каких элементов сколько, к примеру: {1, 1, 1, 2, 2, 3, 4, 7, 7, 8} 1 (3)...

16
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
15.04.2023, 11:57
Diana528, нет проблем...

Java
1
       int n = arr.length; // количество элементов в любом массиве (не только Integer!)


Каков вопрос - таков ответ!
1
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
15.04.2023, 19:38  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Каков вопрос - таков ответ!
Уже заработалась

Нужно посчитать количество повторяющихся элементов в массиве. (Т.е. найти дубликаты, а после уже посчитать сколько их в массиве, например: 2 2 3 4 2 3 5: 2 - 3, 3 - 2
Используя только массив и циклы.
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
15.04.2023, 19:54
Цитата Сообщение от Diana528 Посмотреть сообщение
Т.е. найти дубликаты
Сколько можно плодить однотипные темы... Вот буквально в прошлой теме решение: Удалить дубликаты из массива заменить String на Integer только.

Добавлено через 5 минут
Из длины исходного вычесть длину бездубликатного, соответственно.
0
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
15.04.2023, 21:08  [ТС]
Цитата Сообщение от Coffeini Посмотреть сообщение
Вот буквально в прошлой теме решение
В той теме нужно было найти дубликаты и удалить их.

А в этой мне нужно посчитать количество дубликатов. Мне не совсем понятен ход решения используя только циклы и массив.
0
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
15.04.2023, 23:09
Цитата Сообщение от Diana528 Посмотреть сообщение
Нужно посчитать количество повторяющихся элементов в массиве.
Цитата Сообщение от Diana528 Посмотреть сообщение
не используя HashSet, Map, Set.
ArrayList значит использовать можно.

Java
1
2
3
4
5
6
7
8
9
10
11
        Integer[] arr = {2, 2, 3, 4, 2, 3, 5};
        List<Integer> known = new ArrayList<>();
        int duplicatesCount = 0;
        for (int i = 0; i < arr.length; i++) {
            if(known.contains(arr[i]))
                duplicatesCount++;
            else
                known.add(arr[i]);
        }
        System.out.println(Arrays.toString(arr));
        System.out.println("количество повторяющихся элементов в массиве " + duplicatesCount);
Code
1
2
[2, 2, 3, 4, 2, 3, 5]
количество повторяющихся элементов в массиве 3
Добавлено через 23 минуты
Цитата Сообщение от Diana528 Посмотреть сообщение
Мне не совсем понятен ход решения используя только циклы и массив.
ещё примеры только циклы и массив
как посчитать сколько раз имеется каждое число
внимание! это простой вариант для наглядности, будет работать только если все значения в массиве точно однозначные!
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        Integer[] arr = {2, 2, 3, 4, 2, 3, 5};
        System.out.println(Arrays.toString(arr));
 
        // в counts[0] считаем нули, в counts[1] единицы итд...
        Integer[] counts = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
        // считаем отдельные числа
        for (int i = 0; i < arr.length; i++) {
            counts[arr[i]]++;
        }
 
        // выдаем количества насчитанных чисел
        for (int i = 0; i < counts.length; i++) {
            int count = counts[i];
            if(count > 0)
                System.out.println("Количество "+i+" = "+count);
        }
Code
1
2
3
4
5
[2, 2, 3, 4, 2, 3, 5]
Количество 2 = 3
Количество 3 = 2
Количество 4 = 1
Количество 5 = 1
0
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
16.04.2023, 06:55  [ТС]
Цитата Сообщение от IOException Посмотреть сообщение
if(known.contains(arr[i]))
                duplicatesCount++;
            else
                known.add(arr[i]);
Спасибо большое, именно это мне и нужно было, только вот не могу разобраться в этой части кода, подскажите пожалуйста как работает duplicatesCount++;
Еще не сталкивалась с счетчиком, если это он.

Как я поняла, создаем переменную duplicatesCount - для того, чтобы был счетчик.
В условии проверяем, содержит ли наш лист такой-то элемент массива по циклу, если содержит, то при помощи этого счетчика идём дальше по циклу по элементам, проверяем следующий.
Если не содержит, то добавить его в лист.

Так?

Добавлено через 13 минут
Цитата Сообщение от IOException Посмотреть сообщение
[2, 2, 3, 4, 2, 3, 5]
количество повторяющихся элементов в массиве 3
Он находит только двойки, а тройки пропустил
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
16.04.2023, 07:23
Цитата Сообщение от Diana528 Посмотреть сообщение
Мне не совсем понятен ход решения используя только циклы и массив.
Что именно непонятно? Как я раньше и говорил, можно найти количество дубликатов через вычитания длин. У этого понятия где-то три значения. Количество уникальных повторяющихся элементов, количество повторов и сумма двух последних, т.е. количество элементов, которых больше двух. Откуда можно узнать, что конкретно нужно?
Да и тем более алгоритм нахождения первого значения очень прост:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static int[] getDuplicates(int[] arr) {
    final int[] arrDelDuplicate = delDuplicates(arr);
    final var Q_D = 2;
    final var arrBuff = new int[arr.length];
    var rSize = 0;
    for (int k : arrDelDuplicate) {
        boolean isAdd = false;
        for (int j = 0, qdl = 0; j < arr.length; ++j) {
            if (arr[j] == k && ++qdl >= Q_D) {
                isAdd = true;
                break;
            }
        }
        if (isAdd) arrBuff[rSize++] = k;
    }
    return Arrays.copyOf(arrBuff, rSize);
}
Проходим по бездубликатному массиву и если какое-то значение в исходном встречается дважды, то добавляем в результирующий. Почему нельзя самому подумать или погуглить...

Без использования мемоизации будет где-то O(nkk), с ней O(nk), с сортировкой O(nlogn).
Более универсальный, но из-за автобоксингов в сеттерах и геттерах не особо эффективный:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public static <T> T delDuplicates(T arr) {
    if (!arr.getClass().isArray()) throw new IllegalArgumentException(arr.getClass() + " is not an array");
    final var l = Array.getLength(arr);
    final var arrBuff = (T) Array.newInstance(arr.getClass().getComponentType(), l);
    var rSize = 0;
    for (int i = 0; i < l; ++i) {
        boolean isAdd = true;
        for (int j = 0; j < rSize; j++) {
            if (Array.get(arrBuff, j) == null) {
                if (Array.get(arr, i) == null) {
                    isAdd = false;
                    break;
                }
            } else if (Array.get(arrBuff, j).equals(Array.get(arr, i))) {
                isAdd = false;
                break;
            }
        }
        if (isAdd) Array.set(arrBuff, rSize++, Array.get(arr, i));
    }
    final var resultArr = (T) Array.newInstance(arr.getClass().getComponentType(), rSize);
    System.arraycopy(arrBuff, 0, resultArr, 0, rSize);
    return resultArr;
}
 
public static <T> T getDuplicates(T arr) {
    final var arrDelDuplicate = delDuplicates(arr);
    final var Q_D = 2;
    final var l = Array.getLength(arr);
    final var lD = Array.getLength(arrDelDuplicate);
    final var arrBuff = (T) Array.newInstance(arr.getClass().getComponentType(), l);
    var rSize = 0;
    for (int i = 0; i < lD; ++i) {
        boolean isAdd = false;
        for (int j = 0, qdl = 0; j < l; ++j) {
            if (Array.get(arr, j) == null) {
                if (Array.get(arrDelDuplicate, i) == null && ++qdl >= Q_D) {
                    isAdd = true;
                    break;
                }
            } else if (Array.get(arr, j).equals(Array.get(arrDelDuplicate, i)) && ++qdl >= Q_D) {
                isAdd = true;
                break;
            }
        }
        if (isAdd) Array.set(arrBuff, rSize++, Array.get(arrDelDuplicate, i));
    }
    final var resultArr = (T) Array.newInstance(arr.getClass().getComponentType(), rSize);
    System.arraycopy(arrBuff, 0, resultArr, 0, rSize);
    return resultArr;
}
1
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
16.04.2023, 08:08  [ТС]
Цитата Сообщение от Coffeini Посмотреть сообщение
Что именно непонятно?
Мне не понятно как исправить мой код.

Цитата Сообщение от Coffeini Посмотреть сообщение
Почему нельзя самому подумать или погуглить...
Потому что весь гугл уже перечитала, куча видео пересмотрела, а толку ноль, не могу свою идею развить.
Потому что элементарное мне не понятно:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void func2() {
        Scanner num = new Scanner(System.in);
        System.out.println("Enter array's lenght: ");
        int size = num.nextInt();
        int[] arr = new int[size];
 
        Set<Integer> duplicates = new HashSet<>();
System.out.println("Array's lenght: " + arr.length);
        System.out.println("Enter your grade: ");
        for (int i = 0; i < size; i++) {
            arr[i] = num.nextInt();
        }
int count1 = 0;
        for (int i = 0; i < size; i++) {
            int e1 = arr[i];
            // сравниваем каждый элемент со всеми остальными
            for (int j = 0; j < size; j++) {
                if (i == j) continue; // не проверяем элемент с собой же
                int e2 = arr[j];
                if (e1 == e2) {
                    // дубликат найден, сохраним его
                    duplicates.add(e2);
                    count1++;
                }
            }
        }
        for (int i = 0; i < size; i++) {
            System.out.println("Count of array's elements: " + arr[i] + " - " + count1);
        }
Я подумала, настолько - насколько меня научили, и насколько прочла гугл.
Цитата Сообщение от Coffeini Посмотреть сообщение
если какое-то значение в исходном встречается дважды, то добавляем в результирующий.
И в своем коде я и сравнивала и добавляла в список.
И также, у меня есть счетчик, но почему на выводе у меня это происходит, мне не совсем понятен механизм.

Вывод:
Enter your grade:
6
6
4
4
3
2

Count of array's elements: 6 - 4
Count of array's elements: 6 - 4
Count of array's elements: 4 - 4
Count of array's elements: 4 - 4
Count of array's elements: 3 - 4
Count of array's elements: 2 - 4

Мне нужно лишь, чтоб объяснили как спасти мой код, алгоритм действий - как найти дубликаты я итак понимаю, но не совсем понимаю как это писать в коде. И другими способами я уже нашла и дубликаты и количество повторений и т.п.
Мне нужно теперь разобраться как этим способом сделать и ВСЁ.
А не критику читать.
Вы можете не отвечать мне вообще, если такое мнение.
Все учатся и делают ошибки - и это нормально.

Добавлено через 3 минуты
Цитата Сообщение от Coffeini Посмотреть сообщение
public static int[] getDuplicates(int[] arr) {
    final int[] arrDelDuplicate = delDuplicates(arr);
    final var Q_D = 2;
    final var arrBuff = new int[arr.length];
    var rSize = 0;
    for (int k : arrDelDuplicate) {
        boolean isAdd = false;
        for (int j = 0, qdl = 0; j < arr.length; ++j) {
            if (arr[j] == k && ++qdl >= Q_D) {
                isAdd = true;
                break;
            }
        }
        if (isAdd) arrBuff[rSize++] = k;
    }
    return Arrays.copyOf(arrBuff, rSize);
}
Это сложный код для моего понимания, я второй месяц только занимаюсь.

Добавлено через 3 минуты
Цитата Сообщение от Coffeini Посмотреть сообщение
final var Q_D = 2;
Почему тут двойка, тоже не совсем понятно.
Цитата Сообщение от Coffeini Посмотреть сообщение
final var arrBuff = (T) Array.newInstance(ar
newInstance - у меня не работает.
Цитата Сообщение от Coffeini Посмотреть сообщение
++qdl >= Q_D
тут тоже ничего не понятно

Добавлено через 2 минуты
Цитата Сообщение от Coffeini Посмотреть сообщение
Почему нельзя самому подумать или погуглить...
Вот самый простой способ, который я сделала и поняла что сделала:
Java
1
2
3
4
5
6
7
8
9
// Посчитать сколько раз каждое значение встречается в массиве
        Map<Integer, Integer> counter = new HashMap<>();
        for (int x : arr) {
            int newValue = counter.getOrDefault(x, 0);
            newValue++;
            counter.put(x, newValue);
        }
        System.out.println("Dublicates: " + duplicates);
        System.out.println("Count of array's elements: " + counter);
Но я учусь, и мне нужно знать и ПОНИМАТЬ как и другими способами решить задачу. А не просто погуглить, найти одно решение и все.

Добавлено через 19 минут
Цитата Сообщение от Diana528 Посмотреть сообщение
но почему на выводе у меня это происходит,
Я понимаю, что он в общем посчитал сколько всего повторяющихся элементов.
Но мне этот ужас нужно исправить в моем коде, чтобы было так:
6 - 2 шт
4 - 2 шт
3 - 1 шт
2 - 1 шт
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
16.04.2023, 08:17
Цитата Сообщение от Diana528 Посмотреть сообщение
свою идею развить
Не проще тогда создать сет и вычесть из листа все элемента сета? Потом обратно в сет запихать.
Цитата Сообщение от Diana528 Посмотреть сообщение
чтоб объяснили как спасти мой код
Никак? В нем же используются коллекции
Цитата Сообщение от Diana528 Посмотреть сообщение
Поняла что сделала:
Как можно понимать, что происходит в коллекциях, но не понимать алгоритмы на массивах?
Цитата Сообщение от Diana528 Посмотреть сообщение
newInstance - у меня не работает.
В самый вверх:
Java
1
2
import java.lang.reflect.Array;
import java.util.Arrays;
Цитата Сообщение от Diana528 Посмотреть сообщение
Почему тут двойка, тоже не совсем понятно.
Quantity Duplicate, т.е. сколько нужно чисел эквивалентных, чтобы называться дубликатом.
Цитата Сообщение от Diana528 Посмотреть сообщение
тут тоже ничего не понятно
Префиксный инкремент. Повторюсь, понимаете коллекции, но базовые операторы, нет? Вообще тут много преобразований происходит, мне проще декомпиляцию показать, чем объяснять:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static int[] getDuplicates(int[] arr) {
    int Q_D = true;
    int[] arrDelDuplicate = (int[])delDuplicates(arr);
    int[] arrBuff = new int[arr.length];
    int rSize = 0;
    int[] var5 = arrDelDuplicate;
    int var6 = arrDelDuplicate.length;
 
    for(int var7 = 0; var7 < var6; ++var7) {
        int k = var5[var7];
        boolean isAdd = false;
        int j = 0;
 
        for(int qdl = 0; j < arr.length; ++j) {
            if (arr[j] == k) {
                ++qdl;
                if (qdl >= 2) {
                    isAdd = true;
                    break;
                }
            }
        }
 
        if (isAdd) {
            arrBuff[rSize++] = k;
        }
    }
 
    return Arrays.copyOf(arrBuff, rSize);
}


Добавлено через 4 минуты
Вот тут про операторы: https://docs.oracle.com/javase... s/op1.html
Тут про сравнения: https://docs.oracle.com/javase... s/op2.html
Вкратце:
The && and || operators perform Conditional-AND and Conditional-OR operations on two boolean expressions. These operators exhibit "short-circuiting" behavior, which means that the second operand is evaluated only if needed.
1
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
16.04.2023, 08:35  [ТС]
Цитата Сообщение от Coffeini Посмотреть сообщение
Повторюсь, понимаете коллекции, но базовые операторы, нет?
Мой ментор все это перескочил, и сразу начал давать задания на коллекции, сказал что походу дела поймешь.
Мы все перескочили: циклы, массивы, условия - он сказал во время решения задач ты с ними столкнёшься и почитаешь про это.
Когда мы только начали, мое первое задание было - Найти в строке слова, в которых есть повторные символы, а затем посчитать количество этих символов. При всем этом, я сама в интернете смотрела видео и читала книжки, но там только азы. И постепенно решала задачи. Но очень многое упущено - я это понимаю.

Добавлено через 3 минуты
Цитата Сообщение от Coffeini Посмотреть сообщение
Не проще тогда создать сет и вычесть из листа все элемента сета? Потом обратно в сет запихать.
Dublicates: [3, 4]
есть у меня Set.
и он находит дубликаты.
А вот как написать так, чтобы он еще и посчитал их количество без использования Map - не понимаю.
В своем коде я лишь нашла максимальное, минимальное, среднее значения, дубликаты и сколько раз встречаются дубликаты в общем, в массиве. И при помощи Map я нашла все же, сколько раз встречается тот или иной элемент. По сути задача решена, но ментор ТРЕБУЕТ другой способ, на котором я застряла.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 public void func2() {
        Scanner num = new Scanner(System.in);
        System.out.println("Enter array's lenght: ");
        int size = num.nextInt();
        int[] arr = new int[size];
 
        Set<Integer> duplicates = new HashSet<>();
 
        float avg = 0;
 
        System.out.println("Array's lenght: " + arr.length);
        System.out.println("Enter your grade: ");
        for (int i = 0; i < size; i++) {
            arr[i] = num.nextInt();
        }
 
        int max = arr[0];
        int min = arr[0];
 
        System.out.print("Inserted array's elements: ");
        for (int i = 0; i < size; i++) {
            System.out.print(" " + arr[i]);
            if (max < arr[i])
                max = arr[i];
            if (min > arr[i])
                min = arr[i];
            avg = avg + arr[i];
        }
        System.out.print("\nAverage: " + avg / size + "\nMax: " + max + "\nMin: " + min);
        System.out.println();
 
        int count1 = 0;
        for (int i = 0; i < size; i++) {
            int e1 = arr[i];
            // сравниваем каждый элемент со всеми остальными
            for (int j = 0; j < size; j++) {
                if (i == j) continue; // не проверяем элемент с собой же
                int e2 = arr[j];
                if (e1 == e2) {
                    // дубликат найден, сохраним его
                    duplicates.add(e2);
                    count1++;
                }
            }
        }
            System.out.println("Count dublicates of array's elements: "  + " - " + count1);
        // Посчитать сколько раз каждое значение встречается в массиве
        Map<Integer, Integer> counter = new HashMap<>();
        for (int x : arr) {
            int newValue = counter.getOrDefault(x, 0);
            newValue++;
            counter.put(x, newValue);
        }
        System.out.println("Dublicates: " + duplicates);
        System.out.println("Count of array's elements: " + counter);
    }
Вывод:
Enter array's lenght:
6
Array's lenght: 6
Enter your grade:
2
2
3
3
4
2
Inserted array's elements: 2 2 3 3 4 2
Average: 2.6666667
Max: 4
Min: 2
Count dublicates of array's elements: - 8
Dublicates: [2, 3]
Count of array's elements: {2=3, 3=2, 4=1}

P.s: все работает, все написала сама без гугла, я поняла что написала.
Но вот такой у меня ментор, и мой мозг хочет знать больше, но я ограничена в знаниях на данном этапе.
0
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
16.04.2023, 08:49
Цитата Сообщение от Diana528 Посмотреть сообщение
Он находит только двойки, а тройки пропустил
да нет не пропустил. В данном массиве 3 дубликата. Два из них двойки и один тройка.

[2, 2, 3, 4, 2, 3, 5]

таким образом мы посчитали только дубликаты а не общее количество таких чисел у которых имеются дубликаты.
0
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
16.04.2023, 08:54  [ТС]
Цитата Сообщение от IOException Посмотреть сообщение
Два из них двойки и один тройка.
Поняла, от нуля считается.

Цитата Сообщение от IOException Посмотреть сообщение
Integer[] arr = {2, 2, 3, 4, 2, 3, 5};
        List<Integer> known = new ArrayList<>();
        int duplicatesCount = 0;
        for (int i = 0; i < arr.length; i++) {
            if(known.contains(arr[i]))
                duplicatesCount++;
            else
                known.add(arr[i]);
        }
        System.out.println(Arrays.toString(arr)) ;
        System.out.println("количество повторяющихся элементов в массиве " + duplicatesCount);
А здесь можно этот же код подкорректировать, чтобы на вывод вышло:

[2, 2, 3, 4, 2, 3, 5]
Количество 2 = 3
Количество 3 = 2
Количество 4 = 1
Количество 5 = 1

Или уже таким способом не решают то, что я хочу?
0
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
16.04.2023, 09:03
Лучший ответ Сообщение было отмечено Diana528 как решение

Решение

O(n^2) в лоб
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
    public static void main(String[] args)  {
        var array = new int[]{2, 5, 2, 3, 5, 4, 5, 2, 3, 5};
 
        for (int i = 0; i < array.length; i++) {
            int count = 0;
            for (int j = 0; j < array.length; j++)
                if (array[i] == array[j]) {
                    if (j < i) break;
                    count++;
                }
            if (count > 1) System.out.println(array[i] + " - " + count);
        }
    }
Code
1
2
3
2 - 3
5 - 4
3 - 2
1
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
16.04.2023, 09:13
Цитата Сообщение от Diana528 Посмотреть сообщение
И при помощи Map я нашла все же, сколько раз встречается тот или иной элемент. По сути задача решена, но ментор ТРЕБУЕТ другой способ, на котором я застряла.
так я же вам подсказал

там пример без мапы выводит
Code
1
2
3
4
5
[2, 2, 3, 4, 2, 3, 5]
Количество 2 = 3
Количество 3 = 2
Количество 4 = 1
Количество 5 = 1
0
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
16.04.2023, 09:23  [ТС]
Цитата Сообщение от vcrop Посмотреть сообщение
if (count > 1) System.out.println(array[i] + " - " + count);
Вот что мне нужно было всего то Спасибо огромное!

Добавлено через 1 минуту
Цитата Сообщение от IOException Посмотреть сообщение
там пример без мапы выводит
Да, спасибо большое я видела. Но там только на однозначные числа. Если оценка будет в формате балла, например - 90, 80 он не сработает?
0
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
16.04.2023, 09:33
Лучший ответ Сообщение было отмечено Diana528 как решение

Решение

если у вас уже есть максимум можно и не только однозначные.

Java
1
2
3
4
5
6
        int[] counts = new int[max+1];
 
        // считаем отдельные числа
        for (int i = 0; i < arr.length; i++) {
            counts[arr[i]]++;
        }
правда с негативными так не получится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2023, 09:33
Помогаю со студенческими работами здесь

Посчитать сумму всех элементов и количество нулевых элементов в массиве
1. Нужно написать простенькую программку на стандартном языке С, который бы считал в массиве от 1 до 5: - Сумму нечетных - Сумму четных...

Посчитать количество элементов в двумерном массиве
Задача состоит в том, что есть двумерный массив с ноликами и единичками. И надо пощитать количество множеств единичек. Вот пример на...

Посчитать количество элементов в одномерном массиве
Помогите решить задачу . Посчитать сколько элементов в одномерном массиве, состоящих из четырех или меньше символов. Вывести количество...

Посчитать количество одинаковых элементов в массиве
Всем привет, есть массив вида: Array ( =&gt; Array ( =&gt; 2033 =&gt; 2033 ...

Посчитать количество элементов в символьном массиве Z(N,N)
Здравствуйте.Требуется ваша помощь уважаемые программеры)Нужно посчитать количество элементов в массиве Z(N,N) в котором второй является...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru