Java: найти целочисленную частоту в массиве - PullRequest
0 голосов
/ 19 октября 2011

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

Проблема в том, что мне нужно создать частоту:

ex: Интервал:

14.5-16.5

Частота: 1 (здесь следует указать, сколькоцелые числа принадлежат к этим границам)

Интервал:

16,5-18,5

Частота: 4 и т. д.

Вот код, который у меня есть до сих пор, почти сделано, кроме нахождения частоты каждой границы ..

import java.util.Scanner;
public class Sta
{
    public static void main(final String args[])
    {
        final Scanner input = new Scanner(System.in);

        int num=0;
        int range=0;
        int subnum;
        int subwid;

        System.out.print("How many numbers do you want to enter: ");
        num=input.nextInt();

        final int array[]=new int[num];

        System.out.print("Enter the numbers now: ");
        for(int i=0; i<array.length; i++)
        {
            array[i]=input.nextInt();
        }

        System.out.print("These are the numbers you entered:\n");
        printArray(array);

        int smallest=array[0];
        int largest=array[0];

        for (final int element : array) {
            if(element>largest) {
                largest=element;
            } else if(element<smallest) {
                smallest=element;
            }
            range=largest-smallest;
        }
        System.out.printf("Largest is %d\n",largest);
        System.out.printf("Smallest is %d\n",smallest);
        System.out.printf("Range is %d\n",range);

        System.out.print("Enter the number of subinterval: ");
        subnum=input.nextInt();

        subwid=range/subnum;
        System.out.printf("The width of subinterval is %d\n", subwid);

        /* this part should find the boundaries and find the elements that fall between
           the each two boundaries */
        for(double boundary=smallest-.5; boundary <=largest+.5; boundary +=subwid)
        {
        System.out.printf("Boundaries are %.1f\n",boundary);

        for(int element=0; element<array.length; element++)
          {
            if(element>=boundary)
              {
            System.out.printf("f=%d\n",element);
              }
          }
         }
    }

    public static void printArray(final int arr[])
    {

        for (final int element : arr) {
            System.out.print(element + "\n");
        }
    }

}

Вопрос в том, как найти частоты, как в приведенном выше примере таблицы ??

1 Ответ

2 голосов
/ 20 октября 2011

Вот несколько вариантов:

  • Вложенные циклы: для каждого диапазона подсчитайте количество чисел, попадающих в этот диапазон.
  • 'new int [subnum]'.За один проход подсчитайте количество предметов в каждом диапазоне.Рассмотрите возможность использования деления и усечения.
  • Сортировка чисел.Посчитайте, сколько происходит перед каждой границей.
...