繁体   English   中英

Java中的频率数组和直方图

[英]Frequency Array and Histogram in Java

我必须制作以下程序。
编写一个程序,为 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();
}
}

要打印这样的数组,您只需要另一个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();

获取数据后,使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM