繁体   English   中英

如何创建直方图?

[英]How to create Histogram?

我必须创建一个直方图来对 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("*");
            }
        }
    }

我遇到的主要问题是如何创建“垃圾箱”。 到目前为止,我的输出没有任何垃圾箱,也没有真正格式化,我想知道我将如何做到这一点。 任何帮助,将不胜感激。 谢谢

“垃圾箱”的答案是你从最高的人的身高中减去最短球员的身高,然后除以你的垃圾箱的数量。 所以现在你有一个垃圾箱的大小。 有了这个数字,您就知道如何将玩家放入正确的垃圾箱中。

例如你有 10 个箱子,最短的玩家是 100,最高的玩家是 200。所以你知道 (200-100)/10 是 10,所以一个箱子的大小是 10。第一个箱子是从 100 到 110,第二个是从 111 到 120 等等。

接下来遍历玩家。 第一个玩家是 136。所以 (136-100)/10 是 3.6,这意味着它应该在第三个 bin 中。 因此,您将 +1 添加到第三个 bin。

所以“bins”只是一个包含玩家数量的int数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM