Наибольший счет появления - PullRequest
0 голосов
/ 13 февраля 2019

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

Реализация (исходный код) программы (назовите ее LargestOccurenceCount), которая читается от пользователяположительные ненулевые целочисленные значения, находит наибольшее значение и считает его вхождения.Предположим, что вход заканчивается цифрой 0 (в качестве значения часового, чтобы остановить цикл).Программа должна игнорировать любой отрицательный ввод и продолжать читать пользовательские вводы, пока не будет введен 0.Программа должна отображать наибольшее значение и количество раз, которое оно появилось

Scanner reader = new Scanner(System.in);
int num = 0;
int array[] = null;

while ((num = reader.nextInt()) != 0) {
    System.out.println("Enter a positive integer (0 to quit): ");
    num = reader.nextInt();
    array[num] = num;
}

Пример прогона 1:

Введите положительные целые числа (от 0 до выхода): 3 4 5-9 4 2 5 1 -5 2 5 0

Наибольшее значение: 5 Вхождений: 3 раза

Программа должна вывести наибольшее введенное значение и количество раз, которое оно было введенодо ввода 0.

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Если нет требований использовать только массив, вы можете использовать ArrayList для хранения пользовательских вводов

List<Integer> list = new ArrayList<>();
while ((num = reader.nextInt()) != 0) {
    System.out.println("Enter a positive integer (0 to quit): ");
    num = reader.nextInt();
    list.add(num);
}

Тогда, если вы хорошо разбираетесь в stream api, есть довольно лаконичное решение:

Map.Entry<Integer, Long> lastEntry = list.stream()
            .collect(groupingBy(Function.identity(), TreeMap::new, counting()))
            .lastEntry();

System.out.println(
        "Largest value: " + lastEntry.getKey() +
        " Occurrences: " + lastEntry.getValue() + " times");
0 голосов
/ 13 февраля 2019

Вы можете использовать следующий фрагмент:

// part of reading the values from command line and 
// putting them into this array is omitted
int[] array = ...;
int biggest = 0;
int occurance = 0;
for(int num : array) {
    if(num > biggest) {
        biggest = num;
        occurance = 0;
    }
    if(num == biggest) {
        occurance++;
    }
}
System.out.printf("Biggest number %s occured %s times.%n", biggest, occurance);

Как уже упоминалось в комментарии, я пропустил ту часть, где вы читаете значения из командной строки, так как это не похоже на вашепроблема.


Другое решение, которое выполняет чтение напрямую, без необходимости использования массива и всего в одном цикле:

Scanner scanner = new Scanner(System.in);
int biggest = 0;
int occurance = 0;
int num;

while (true) {
    System.out.print("Enter a number: ");
    // this may throw an Exception if the users input is not a number
    num = Integer.parseInt(scanner.nextLine());
    if(num == 0) {
        // user entered a 0, so we exit the loop
        break;
    }
    if(num > biggest) {
        biggest = num;
        occurance = 1;
    } else if(num == biggest) {
        biggest++;
    }
}
System.out.printf("Biggest number %s occured %s times.%n", biggest, occurance);
0 голосов
/ 13 февраля 2019

Разделите вашу проблему на две части.1. Найдите наибольшее значение

int findLargest(int[] array) {
  assert array.length > 0;
  int result = array[0];
  for (int element : array) {
    if (element > result) {
      result = element;
    }
  }
  return result;
}
... и найдите его в массиве
int countOccurences(int[] array, int value) {
  int occurences = 0;
  for (int element : array) {
    if (element == value) {
      occurences++;
    }
  }
  return occurences;
}

Обратите внимание, что в массиве должен быть хотя бы один элемент;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...