Я пишу программу, которая выводит, сколько раз каждое целое число встречается в массиве целых чисел. Я выполнил это, однако у меня есть повторяющиеся выходные строки.

Это выход:

>run:
>Please enter integers from 0 to 100: 
1
2
3
4
4
5
0
// 1 occurs 1 time //
2 occurs 1 time //
3 occurs 1 time //
4 occurs 2 times //
4 occurs 2 times //
5 occurs 1 time //
BUILD SUCCESSFUL (total time: 14 seconds)

Как вы можете видеть, «4 встречается 2 раза» печатается дважды, так как оно дважды встречается в массиве.

Мне просто нужно какое-то руководство по устранению дубликатов. Все было бы очень признательно.

import java.util.*;
public class WorkSpace3 {
    public static void main(String[] args) {
        int i = 0;
        int count = 0;
        int key = 0;

        System.out.print("Please enter integers from 0 to 100: ");
        int[] myList = new int[100];
        Scanner s = new Scanner(System.in);
        for (i = 0; i < myList.length; i++) 
        {
            myList[i] = s.nextInt();
            if (myList[i] == 0)
                break;
        }

        while (key < myList.length && myList[key] != 0) {
            for (i = 0; i < myList.length; i++) 
            {

                {   if (myList[i] == myList[key]) 
                    {  count++; }   }
            }


            if (count == 1)
                System.out.println(myList[key] + " occurs " + count + " time ");
            if (count > 1)
                System.out.println(myList[key] + " occurs " + count + " times ");
            key++;
            count = 0;

        }
    }
}
0
Frank 27 Ноя 2016 в 05:13

3 ответа

Лучший ответ

Вам доступен простой подход - пометить элементы, которые вы посчитали, нулями. Этот подход не универсален; он действителен только потому, что вы используете ноль для обозначения конца входной последовательности конечным пользователем.

Чтобы использовать этот подход, вам придется немного изменить свой код: вместо того, чтобы искать ноль в цикле while, настройте переменную для обозначения длины последовательности. Установите его на myList.length в начале, а затем сбросьте на i в перерыве. Теперь вы можете пройти по списку до этого максимального количества, произвести подсчет, а затем установить нули в элементы, которые вы уже подсчитали.

0
dasblinkenlight 27 Ноя 2016 в 02:23

См. Элемент набора:

https://docs.oracle.com/javase/7/docs/api/java/util/Set.html

Создание элемента набора из массива Вы удаляете дубликаты.

0
rafal_zonk 27 Ноя 2016 в 02:18

Попробуйте это с помощью Map

Map<Integer,Integer> counts=new HashMap<Integer,Integer>();
for (i = 0; i < myList.length; i++) {
 if(counts.contains(myList[i]){
counts.put(myList[i],++counts.get(myList[i]);
 }else{
 counts.put(myList[i],1);
}
0
snofty 27 Ноя 2016 в 02:28