Создание неграфической гистограммы из значений массива - PullRequest
2 голосов
/ 21 июня 2010

С помощью метода starPrint мне нужно сделать так, чтобы частота каждого числа, попадающего в массив, отображалась в гистограмме как:

1=3***
2=4****
3=7*******

и так далее.Требуется количество заполненных звезд, равное частоте появления числа!На данный момент я получаю количество звездочек длины массива.

public static void main(String[] args) {

    int matrix[][] = new int[100][2];

    for (int row = 0; row < matrix.length; row++) {
        for (int column = 0; column < matrix[row].length; column++) {
            matrix[row][column] = (int) (Math.random() * 6 + 1);
        }

    }
    int[] hist1 = frequency(matrix);

    String star = starPrint(hist1);
    for (int i = 1; i < hist1.length; i++) {
        System.out.print(" \n" + hist1[i] + star);
    }

}

public static String starPrint(int[] value) {

    String star = "";
    for (int i = 0; i < value.length; i++) {

        star += "*";
    }
    return star;
}

public static int[] frequency(int[][] matrix) {

    int[] nums = new int[7];

    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix[i].length; j++) {
            nums[matrix[i][j]] += 1;
        }
    }
    return nums;
}

Ответы [ 3 ]

1 голос
/ 21 июня 2010

Во-первых, звезды должны меняться, верно? тогда

String star = starPrint(hist1);

должно быть здесь

for (int i = 1; i < hist1.length; i++) {
        System.out.print(" \n" + hist1[i] + star);
}

Во-вторых, ваш starPrint метод должен измениться (если только так не указано в домашнем задании ???) с

public static String starPrint(int[] value) {

до

public static String starPrint(int value) {

, что означает, что вам понадобится случайное значение, а не длина массива

for (int i = 0; i < value; i++) { 

Не значение. Длина

1 голос
/ 21 июня 2010

Вот пример в Ада , который может вам помочь.

Max_Count  : constant Integer := 1_200;
Bin_Size   : constant Integer := 100;
--
type Histogram is array (0 .. Max_Count / Bin_Size - 1) of Integer;
Graph : Histogram := (others => 0);
--
for J in Graph'Range loop --'
   TIO.Put(Label(J));
   for K in 1 .. (Graph(J) * Plot_Size) / Game_Count loop
      TIO.Put("*");
   end loop;
   TIO.New_Line;
end loop;

Добавление: обратите внимание, что starPrint() всегда возвращает одинаковое количество звездочек. Каждый раз, когда вы печатаете значение hist1[i], выведите столько звездочек.

Добавление: рассмотрите возможность изменения starPrint(int[] value) на starPrint(int value).

0 голосов
/ 21 июня 2010

Рассматривали ли вы использовать Map<Integer, Integer>?Вы можете перебирать массив, и для каждого номера проверять, является ли он ключом для карты.Если это так, получите соответствующее значение и увеличьте его.Если нет, укажите число на карте вместе с числом раз, которое оно произошло до сих пор (один).

Затем, когда дело доходит до печати гистограммы, просто выполните итерацию по keySet() картыи получите значения.

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