Как создать гистограмму? - PullRequest
0 голосов
/ 04 февраля 2020

Мне нужно создать гистограмму, которая определяет высоту игроков NBA. Вход идет в консоль. Вот как должен выглядеть вывод:

Num bins: 16
Min: 63
Max: 91
Avg: 78.42798594847775
                                      722                         
                                      +-+                         
                                      |*|                         
                                      |*|                         
                                  611 |*|                         
                                  +-+ |*|                         
                              524 |*| |*|                         
                              +-+ |*| |*|                         
                              |*| |*| |*|     459                 
                              |*| |*| |*|     +-+                 
                          361 |*| |*| |*|     |*|                 
                          +-+ |*| |*| |*| 352 |*|                 
                          |*| |*| |*| |*| +-+ |*|                 
                          |*| |*| |*| |*| |*| |*|                 
                          |*| |*| |*| |*| |*| |*|                 
                          |*| |*| |*| |*| |*| |*| 188             
                          |*| |*| |*| |*| |*| |*| +-+             
                          |*| |*| |*| |*| |*| |*| |*|             
                       88 |*| |*| |*| |*| |*| |*| |*|             
                   53 +-+ |*| |*| |*| |*| |*| |*| |*|             
    1   1   4   7 +-+ |*| |*| |*| |*| |*| |*| |*| |*|  34   7   4 
------------------------------------------------------------------
 63  64  66  68  70  72  73  75  77  79  81  82  84  86  88  90 

Пока у меня есть:

package a3;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ConsoleHIstogram {

public static void main(String[] args) {

    // Set up scanner for input from console.

    Scanner scan = new Scanner(System.in);

    int bin = scan.nextInt();

    ArrayList<Integer> heights = new ArrayList<Integer>(); 

    int firstNum = scan.nextInt();

    double sumOfHeights = 0;

    int start = scan.nextInt();

    while (scan.hasNextInt()) {
        heights.add(start);
        start = scan.nextInt();
        sumOfHeights += start;
    }


    int numOfPlayers = heights.size();
    double avgHeight = numOfPlayers / sumOfHeights;



    int minimum = 999999;
    for (int i = 0; i < heights.size(); i++) {
        if (minimum > heights.get(i)) {
            minimum = heights.get(i);
        }
    }

    int maximum = 0;
    for (int i = 0; i < heights.size(); i++) {
        if (maximum < heights.get(i)) {
            maximum = heights.get(i);
        }
    }

    // int[] heightArr = new int[maximum];

    ArrayList<Integer> heightArr = new ArrayList<Integer>();

    for (int i = minimum; i < maximum; i++) {
        heightArr.add(i);
    }

    System.out.println("Num bins: " + firstNum);
    System.out.println("Avg: " + avgHeight);
    System.out.println("Num bins: " + bin);

    for (int i = 0; i < heights.size(); i++) {
        if (heightArr.get(i) > 0) {
            System.out.print(heightArr.get(i));
            for (int j = 0; j < heights.get(i); j++) {
                System.out.print("*");
            }
            for (int j = heights.get(i) - 1; j < heights.get(i); j++) {
                System.out.println("*");
            }
        }
    }

Основная проблема, с которой я сталкиваюсь, заключается в том, как создать «корзины». Пока что мои выходные данные не имеют каких-либо ячеек и не отформатированы, и я хочу знать, как бы это сделать. Любая помощь будет оценена. Спасибо

1 Ответ

0 голосов
/ 04 февраля 2020

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

Например, у вас есть 10 лотков, самый короткий игрок - 100, а самый высокий - 200. Таким образом, вы знаете, что (200-100) / 10 10, так что размер одного бина равен 10. Первый бин от 100 до 110, второй от 111 до 120 и т. д.

Далее перебираем игроков. Первый игрок - 136. Таким образом, (136-100) / 10 - 3,6, что означает, что он должен быть в третьем бине. Таким образом, вы добавляете +1 к третьему бину.

Итак, «бины» - это просто массив int с количеством игроков.

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