如何用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()


我会按行而不是按列执行此操作,以便将其发送到无法访问以前输出线的设备

  • 将数据缩放到0和最大高度之间

  • 从“最大高度”中减去每个缩放值以获得空空间数(假设最高的条形始终为“最大高度”)

  • 在行中循环。对于每一行,循环遍历列。对于每一列,如果当前行号小于该列预期的空格数,请打印空格。否则,打印适当的填充字符


  • 以下是您的任务的注释实现:

    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来决定如何使用它们!关于最大高度,我在写步骤时忘记了:)