java - 如何在水平直方图上打印数字?

标签 java arrays printing histogram

我需要像这样打印直方图:

My Histogram
12.0 #### 2.3
12.5 ### 1.55
13.0 ######################################## 21.9
13.5 ########################### 13.33
14.0 ################################## 17.25
14.5 ########## 5.21

我有可缩放的直方图。总体而言,标题将是第一个,并且在位置 40 或附近的底行下方将是比例,即接近最大值的“好”数字。每个条形后面应跟有其表示的长度。

这是我的代码。我需要帮助来打印直方图右侧和左侧的数字,然后打印标题。我有左侧数字比例所需的方程,但它不会打印。以及右侧的标题和数据。

import java.util.Scanner;

public class Array3
{
    public static void main(String[] arg)
    {
    Histogram h = new Histogram();
    System.out.println(h.readHistogram()); 
    } // end main


} // end Array

class Histogram
{
    private String title;
    private double start, stop;
    private double[] data;



public Histogram(String title, double start, double stop, double[] data, int numBars)
{
    this.title = title;
    this.start = start;
    this.stop = stop;
    this.data = new double[numBars];

    for(int i = 0; i < numBars; ++i)
    {
        if(data.length > i )
        {
            this.data[i] = data[i];
        } // end if
    } // end for

} // end constructor Histogram

public Histogram(){}

public String toString()
{
    String numOfHash = "";
    int a;
    double max = data[0];
    double step1 = (stop-start)/(data.length-1);


    for(int k = 0; k < data.length; ++k)
    {
        if(data[k] > max)
        {
            max = data[k];
        }

    }


    for(int i = 0; i < data.length; ++i)
    {
        a = (int) (data[i] + .5);
        double startNum = start + step1*i;
        System.out.println(startNum);

        for(int j = 0; j < a * 40/max ; ++j)
        {
            numOfHash = numOfHash + "#";
        } // end for loop

        numOfHash = numOfHash + "\n";
    } // end for loop

    return numOfHash;

} // end toString

public Histogram readHistogram()
{
    int num = 0;
    Scanner stdin = new Scanner(System.in);
    System.out.println("Enter a histogram.");
    System.out.println("Title: ");
    String title = stdin.nextLine();
    System.out.println("Start value: ");
    double start = stdin.nextDouble();
    System.out.println("End Value: ");
    double stop = stdin.nextDouble();
    System.out.println("Data: ");

    double[] data = new double[6];
    for(int i = 0; i < 6; ++i)
    {
        data[i] = stdin.nextDouble();
        num++;
    }
    return new Histogram(title, start, stop, data, num);
}

}//结束直方图

最佳答案

您的 toString 方法需要一些工作。首先,您需要找到最大值。接下来,您可以计算缩放因子。现在,您可以绘制直方图。

这是代码。

import java.util.Scanner;

public class Array3 {
    public static void main(String[] arg) {
        Histogram h = new Histogram();
        System.out.println(h.readHistogram());
    } // end main

} // end Array3

class Histogram {
    private String title;
    private double start, stop;
    private double[] data;

    public Histogram(String title, double start, double stop, double[] data,
            int numBars) {
        this.title = title;
        this.start = start;
        this.stop = stop;
        this.data = new double[numBars];

        for (int i = 0; i < numBars; ++i) {
            if (data.length > i) {
                this.data[i] = data[i];
            } // end if
        } // end for

    } // end constructor Histogram

    public Histogram() {
    }

    public String toString() {
        String numOfHash = title + "\n";

        double max = data[0];

        for (int k = 1; k < data.length; ++k) {
            max = Math.max(max, data[k]);
        }

        double scaleFactor = max / 40D;

        double a = start;

        for (int i = 0; i < data.length; ++i) {
            numOfHash += String.format("%.1f", a) + " ";

            int count = (int) Math.round(data[i] / scaleFactor);
            for (int j = 0; j < count; ++j) {
                numOfHash += "#";
            } // end for loop

            numOfHash += " " + String.format("%.2f", data[i]) + "\n";
            a += 0.5D;
        } // end for loop

        return numOfHash;

    } // end toString

    public Histogram readHistogram() {
        int num = 0;
        Scanner stdin = new Scanner(System.in);
        System.out.println("Enter a histogram.");
        System.out.println("Title: ");
        String title = stdin.nextLine();
        System.out.println("Start value: ");
        double start = stdin.nextDouble();
        System.out.println("End Value: ");
        double stop = stdin.nextDouble();
        System.out.println("Data: ");

        double[] data = new double[5];
        for (int i = 0; i < 5; ++i) {
            data[i] = stdin.nextDouble();
            num++;
        }

        stdin.close();

        return new Histogram(title, start, stop, data, num);
    }

} // end Histogram

关于java - 如何在水平直方图上打印数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33636292/

相关文章:

html - ruby 解析问题

c# - 如何从 DataGridView 控件打印值

java - 如何从 Java 应用程序将 JTable 数据发送到打印作业?

java - Apache poi 中的数组公式

java - Scala/Java - 未在指定目录内创建文件

java - 将类类型作为参数传递以在 ArrayList 中使用?

ios - NSPredicate 过滤字典数组(Swift)

c - C 中奇怪的段错误

java - 检查字符串

c# - 从 C# 打印标签 - 文档尺寸对于打印机来说太大