如何用java中的数组制作图表?
我的程序需要绘制如下图表:如何用java中的数组制作图表?,java,Java,我的程序需要绘制如下图表: --- --- xxx --- xxx +++ --- xxx +++ --- ooo xxx +++ --- ooo xxx +++ --- ooo xxx +++ --- *** ooo xxx +++ --- *** ooo xxx +++ --- *** ooo xxx 根据这些数据: private static final int[] DATA = {15,
---
--- xxx
--- xxx
+++ --- xxx
+++ --- ooo xxx
+++ --- ooo xxx
+++ --- ooo xxx
+++ --- *** ooo xxx
+++ --- *** ooo xxx
+++ --- *** ooo xxx
根据这些数据:
private static final int[] DATA = {15, 21, 7, 12, 18};
private static final int MAX_HEIGHT = 10;
private static final int COLUMN_WIDTH = 3;
private static final int SPACE_BETWEEN_COLUMNS = 2;
private static final char[] FILLER = {’+’, ’-’, ’*’, ’o’, ’x’};
我真的需要一些关于如何制作的指南
谢谢为什么不获取数组中的最高值,然后从那里倒计时?
倒计时时,如果每个数组索引大于当前阈值,则写一行 几个步骤:
- 创建StringBuilder以获得结果
- 创建一个int[]数据除以2
- 在此创建过程中,获取最大列数和列数
- 从最大值循环到0(i)
- 从0循环到第1列(j)中的数字
- 如果数据_除以_2[j]>=i,则result.append(FILLER[i])3倍+1个空格。else追加(4个空格)
- 结束循环j,结果。追加(“\n”)
- 结束循环i,打印结果。toString()
以下是您的任务的注释实现:
public class DiagramMaker {
private final int[] data;
private final char[] filler;
private final int maxHeight;
private final int columnWidth;
private final int spacing;
private int[] colHeights;
public DiagramMaker(int[] data, char[] filler, int maxHeight, int columnWidth, int spacing) {
this.data = data;
this.filler = filler;
this.maxHeight = maxHeight;
this.columnWidth = columnWidth;
this.spacing = spacing;
}
/**
Primary method for writing the chart to StringBuffer
*/
public render(StringBuffer buffer) {
//Calculate the heights of all data columns scaled to our maxHeight
colHeights = DiagramMaker.getColumnHeights(data, maxHeight);
//Output all of our lines onto StringBuffer
for (int i=0;i<maxHeight;i++) {
printLine(buffer, i);
}
}
/**
Method for printing 1 line of the chart
*/
public void printLine(StringBuffer buffer, int lineNum) {
//Go through all columns
for (int i=0;i<colHeights.length;i++) {
//Check if current row can be seen on this line
if (colHeights[lineNum] >= maxHeight-lineNum) {
DiagramMaker.printColumnLine(buffer, filler[i], columnWidth);
//Should we draw the spacing
if (i < colHeights.length-1) {
DiagramMaker.printColumnLine(buffer, ' ', spacing);
}
}
}
}
/**
Method for filling the given character specified amount of times into StringBuffer. Used for drawing columns and spacers.
*/
protected static void printColumnLine(StringBuffer buffer, char filler, int width) {
for (int i=0;i<width;i++) {
buffer.append(filler);
}
}
/**
Calculates the maximal data value
*/
protected static int getMaxData(int[] data) {
int maxData = 0;
for (int val : data) {
if (val > maxData) {
maxData = val;
}
}
return maxData;
}
/**
Gets the height of each column given max height and data
*/
protected static int[] getColumnHeights(int[] data, int maxHeight) {
int maxData = getMaxData(data)
int[] heights = new int[data.length];
for (int i=0;i<data.length;i++) {
//Calculate the scale of this column
double scale = ((double)data[i])/maxData;
heights[i] = (int)(scale*data[i]);
}
}
}
公共类图表生成器{
私有最终int[]数据;
私人最终字符[]填充;
私人最终整数最大高度;
私有最终整型列宽度;
私有最终整数间距;
私人住宅;;
公共图表生成器(int[]数据、char[]填充、int maxHeight、int columnWidth、int间距){
这个数据=数据;
this.filler=filler;
this.maxHeight=maxHeight;
this.columnWidth=columnWidth;
这个。间距=间距;
}
/**
将图表写入StringBuffer的主要方法
*/
公共渲染(StringBuffer){
//计算按maxHeight缩放的所有数据列的高度
colHeights=DiagramMaker.getColumnHeights(数据,最大高度);
//将所有行输出到StringBuffer
对于(int i=0;i@zengr当前位置对于带回家的面试来说,这似乎太简单了。我想这可能是家庭作业。我没有想到。我会删除我的答案,但我没有给他代码,只是轻轻推一下。是的,这是一个家庭作业,但我不需要整个代码,只需要一些指导线就可以开始编码。像这样的接缝忽略了最大高度、列宽和宽度间隔_COLUMNS@Carlos是的,这是家庭作业,我只是给出了一些步骤,所以关于列宽和列间的间距,由koporc来决定如何使用它们!关于最大高度,我在写步骤时忘记了:)