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