繁体   English   中英

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

[英]How to print numbers on the horizontal 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或附近的底行下方将是比例,即最大值附近的“ nice”数字。 每个小节后均应加上长度。

这是我的代码。 我需要帮助以获取要打印的直方图右侧和左侧的数字,然后再打印标题。 我在左边有数字比例尺所需的方程式,但不会显示。 以及标题和右侧的数据。

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

暂无
暂无

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

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