我需要像这样打印直方图:
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/