Java中的频率数组和直方图

时间:2016-09-24 07:22:55

标签: java arrays

我必须制作以下程序 编写一个程序,为1到20范围内的数据值构建一个频率数组,然后打印它们的直方图。数据将作为用户的输入读取。将以下功能添加到您的程序中:
一个。 getData函数从用户获取输入并将数据存储在数组中 湾printData函数在数组中打印数据 C。 makeFrequency函数检查数组中的数据,一次检查一个元素,并根据数据值将频率数组中的相应元素加1。 d。 makeHistogram函数使用星号打印出每个元素出现的垂直直方图。例如,如果数据中有五个值1和八个值2,则会打印
1: *****
2: ********
我设法制作了getData功能,但我无法制作其他3.我们将不胜感激。这是我的代码

import java.util.Scanner;

public class FrequencyArray {
static Scanner scan = new Scanner(System.in);

public void getData() {
    System.out.println("Enter the size of array: ");
    int nums = scan.nextInt();
    int[] a = new int[nums];
    for (int i = 1; i < a.length; i++) {
        System.out.print("Enter the numbers: " + i + ":");
        a[i] = scan.nextInt();
    }
}

public void printData() {
    getData();
}

public static void main(String[] args) {
    FrequencyArray array = new FrequencyArray();
    array.getData();
}
}

2 个答案:

答案 0 :(得分:0)

要打印这样一个数组,你需要的只是另一个for-loop - 从0到数组长度的循环,并打印循环计数器的值和存储在该索引的数组中的值。

System.out.println(index + ":" + array[index]);

对于直方图,执行类似的循环,但是对于数组的每个值,在当前行附加一个星号,无论该数字的实例是多少。

System.out.print(index);
//from 0 to the amount of this number, call System.out.print("*");
System.out.println();

答案 1 :(得分:0)

一旦获得数据

,使用TreeMap以排序顺序存储数字及其频率

然后遍历TreeMap以打印数字,然后是星号,表示值的计数

    public void printData() {
        int [] numArray = getData();
        Map<Integer,Integer> valueCountMap = new TreeMap();
        for(int i=0;i<numArray.length;i++) {
        int num = numArray[i];
        if(valueCountMap.get(num) == null) {
            valueCountMap.put(num,0);
        }
        int count = valueCountMap.get(num);
        valueCountMap.put(num,count+1);
        }
        for(Map.Entry<Integer,Integer> entry:valueCountMap.entrySet()) {
            int num = entry.getKey();
            int value = entry.getValue();
            System.out.print(num+":");
            for(int i=0;i<value;i++) {
                System.out.print("*");
            }
         System.out.print(" ");
        }
    }

按照我的假设,getData必须返回整数数组,你需要在一行中打印。经过整改,我已经完成了你的代码 在getData中i = 0而不是i = 1