当前位置: 首页 > 知识库问答 >
问题:

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

公羊喜
2023-03-14

我需要打印一个直方图,如下所示:

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
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);
}

}//结束直方图

共有1个答案

冯卜鹰
2023-03-14

您的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
 类似资料:
  • 我有一个程序,可以将其进度打印到控制台。每20步,它就会打印出步数,如10、20、30等。但在此范围内,它会打印一个点。这是使用末尾带有逗号的print语句打印的(python 2.x) 不幸的是,我注意到这些点是分开打印的,就像这样: 我希望这个更紧,如下所示: 在visual basic语言中,如果在print语句的末尾添加分号而不是逗号,则可以得到此表单。在Python中是否有类似的方法,或

  • 问题内容: 我正在使用matplotlib / pylab Python模块创建非常简单的图表。标记Y轴的字母“ y”在其侧面。如果标签较长(例如单词),则不会出现这种情况,以免将图形的外部扩展到左侧过多。但是对于一个字母的标签,这没有意义,标签应该是直立的。我的搜索空白。如何水平打印“ y”? 问题答案: 这很简单。绘制标签后,您可以简单地更改旋转角度: 或者,您可以将旋转作为参数传递,即

  • 我使用Jaspersoft Studio 6.3.1.final来设计一个包含表格和其他元素的报告。 设计如下所示。该表只有列标题和详细信息部分。 现在垂直打印字段,如下所示: 但我需要的是像这样水平展示它们: 我在网上搜索,没有找到任何运气。 有办法做到这一点吗?我被困在这里了。非常感谢您的帮助! 编辑: 这就是我将数据传递到报表的方式(使用现有的Java服务生成JRBeanDig

  • 问题内容: 我需要打印以下代码: 像这样水平打印而不是垂直打印: 至 我不确定该如何做,会有一些帮助。谢谢 问题答案: 两种选择: 累加一个结果字符串,最后是: 或者告诉Python不要用换行符结束打印的字符串。在您似乎正在使用的Python 3中,您可以通过设置函数的参数(默认情况下为(换行符))来实现此目的: 历史记录:在Python 2中,可以通过在语句末尾添加逗号来实现。

  • 问题内容: 我必须在热蓝牙打印机上打印一些数据,我正在这样做: 它适用于文本,但不适用于图像。我想我需要获取byte[]图像数据。我尝试通过这种方式获取图像数据: 不幸的是,打印机打印了许多奇怪的字符(大约50厘米的纸张)。我不知道如何打印图像。 我想尝试获取位图的像素,然后将其转换为a byte[]并发送,但是我不知道该怎么做。 谢谢 更新: 经过这么长时间,我正在执行此操作:我有一个名为pri

  • 我正在使用MPAndroidChart库。在条形图中,默认情况下,所有条形图都是垂直的(自下而上),如何水平显示?