[英]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.