Java - прочитать в 7 целых числах, подсчитать количество повторений - PullRequest
2 голосов
/ 01 марта 2020

Я беру вступительный класс Java и застрял на задании. Цель состоит в том, чтобы написать программу с использованием одномерных массивов, которая считывает 7 целых чисел, а затем отображает число повторений каждого введенного значения (т. Е. Если вы дважды введете число 12, одна из строк вывода будет «Число 12 встречается 2 раза». ")

У меня уже есть кое-что написанное, но я застрял в том, как посчитать, сколько раз каждый элемент массива встречается. У меня есть идея, что мне понадобится метод и второй массив, но я попал в стену:

public class NumOfOccurrIn7 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // Declare scanner and array
        Scanner A = new Scanner(System.in);
        int counter[] = new int[7];
        System.out.print("Please enter 7 numbers: ");

        //Populate initial array
        for(int t = 0; t < 7; t++) {
            counter[t] = A.nextInt();
        }

        //Process # of reoccurences and print results
        for(int t=0; t<7; t++) {


        }


        for(int t=0; t<7; t++) {
            System.out.print("Number " + counter[t] + " occurs " + x + 
                    " times./n");
        }

    }

    public static int CountOccurrance(int counter[]) {

    }

}

Спасибо за ваш отзыв!

Ответы [ 3 ]

4 голосов
/ 01 марта 2020

Если число 12 встречается дважды, вы не хотите, чтобы выходные данные печатались дважды, поэтому сначала проверьте, был ли номер уже обработан. Вы делаете это, перебирая элементы массива до t, и если один из них совпадает с текущим числом, вы ничего не печатаете.

Далее вы проверяете оставшуюся часть массива и подсчитайте, сколько раз встречается текущее число, затем напечатайте сообщение.

// Process # of reoccurences and print results
for (int i = 0; i < 7; i++) {
    boolean print = true;
    int count = 0;
    for (int j = 0; j < 7; j++) {
        if (counter[j] == counter[i]) {
            if (j < i) {
                print = false;
                break;
            }
            count++;
        }
    }
    if (print) {
        System.out.println("Number " + counter[i] +
                           " occurs " + count + " times.");
    }
}
2 голосов
/ 01 марта 2020
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int counter[] = new int[7];

        System.out.print("Please enter 7 numbers: ");

        for (int t = 0; t < 7; t++) {
            counter[t] = scanner.nextInt();
        }

        int[] occurrances = new int[counter.length];

        label:

        for (int t = 0; t < counter.length; t++) {
            int counterValue = counter[t];

            for (int i = 0; i < t; i++) {
                if (counterValue == counter[i]) {
                    continue label;
                }
            }

            occurrances[t] = 1;

            for (int j = 0; j < counter.length; j++) {
                if (j == t) {
                    continue;
                }
                int other = counter[j];

                if (other == counterValue) {
                    occurrances[t]++;
                }
            }

            if (occurrances[t] > 0) {
                System.out.println("Number " + counter[t] + " occurs " + occurrances[t] + " times.");
            }
        }

    }
2 голосов
/ 01 марта 2020

Вы можете использовать Collections::frequency для подсчета вхождений, например,

import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        int[] nums = { 1, 2, 1, 3, 4, 2, 5, 1, 6, 5, 7, 8, 4, 9 };
        List<Integer> list = IntStream.of(nums).boxed().collect(Collectors.toList());
        Set<Integer> set = new HashSet<Integer>(list);
        for (int n : set) {
            System.out.println("Frequency of " + n + " is " + Collections.frequency(list, n));
        }
    }
}

Вывод:

Frequency of 1 is 3
Frequency of 2 is 2
Frequency of 3 is 1
Frequency of 4 is 2
Frequency of 5 is 2
Frequency of 6 is 1
Frequency of 7 is 1
Frequency of 8 is 1
Frequency of 9 is 1

Другой пример подсчета дубликатов: :

int[] nums = { 1, 2, 1, 3, 4, 2, 5, 1, 6, 5, 7, 8, 4, 9 };
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
boolean duplicatesFound = false;
for (int n : nums) {
    if (map.get(n) == null) {
        map.put(n, 1);
    } else {
        map.put(n, map.get(n) + 1);
        duplicatesFound = true;
    }
}
if (duplicatesFound) {
    System.out.println("Duplicates are as follows:");
    map.entrySet().stream().filter(e -> e.getValue() > 1)
            .forEach(e -> System.out.println(e.getKey() + " has occurred " + e.getValue() + " times."));
} else {
    System.out.println("There are no duplicates in the list");
}

[Обновление]

Еще одно решение (спасибо, @Andreas за предложение):

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        int[] nums = { 1, 2, 1, 3, 4, 2, 5, 1, 6, 5, 7, 8, 4, 9 };
        Map<Integer, Long> frequencyMap = Arrays.stream(nums).boxed()
                .collect(Collectors.groupingBy(n -> n, Collectors.counting()));
        frequencyMap.forEach((n, count) -> {
            System.out.println("Frequency of " + n + " is " + count);
        });
    }
}

Выход:

Frequency of 1 is 3
Frequency of 2 is 2
Frequency of 3 is 1
Frequency of 4 is 2
Frequency of 5 is 2
Frequency of 6 is 1
Frequency of 7 is 1
Frequency of 8 is 1
Frequency of 9 is 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...