任务是用Java创建一个程序,将直方图打印到控制台,显示一组值的频率分布
程序是读取1-100包含的整数。然后生成一个类似给定图像上的图表。
到目前为止,我已经提出了以下解决方案,但老师说这太复杂了,并且有一种更简单的方法来实现它。
我班上没有人能够看到怎么样,但是我可以看到她对我提出的解决方案的看法,如下所示,因为当我使用第一个时出现问题。填充数组中的int,以对其进行排序。
public void printChart()
{
res = new int[10];
for (int i = 0; i < ia.length; i++) {
int firstDigit = 0;
if (i > 10) {
firstDigit = Integer.parseInt(Integer.toString(ia[i]).substring(0, 1));
}
res[firstDigit] += 1;
}
for (int i = 0; i < res.length; i++) {
System.out.format("%-10s %-5s", (i) + "1" + " - " + (i+1) + "0", "|");
for (int o = 0; o < res[i]; o++) {
System.out.print("*");
}
System.out.println("");
}
}
她建议我创建一个包含与原始数组相同数量的新数组,有点像我在这里写的那样,但我似乎无法弄清楚如何循环它,打印出来。她甚至说如果句子没有可能,所以我想我必须在for循环中写一些条件。
public void printChart2()
{
res = new int[NUMBERS];
// Fill the other array, by counting the amount of a specific int
// and placing it on the given relevant index
for (int i = 0; i < ia.length; i++) {
res[ia[i]] += 1;
}
for (int i = 0; i < res.length; i += 10) {
System.out.format("%-10s %-5s", (i+1) + " - " + (i+10), "|");
}
}
以下是我的字段和构造函数,以防万一。
private final int NUMBERS = 100;
private final int RANDOMMAX = 99;
private int[] ia;
private int[] res;
public Arbitrary()
{
ia = new int[NUMBERS];
for (int i = 0; i < NUMBERS; i++) {
ia[i] = (int) (Math.random() * RANDOMMAX) + 1;
}
printChart();
}
答案 0 :(得分:0)
你的整个代码应该像这样简单......
int NUMBERS = 100;
int RANDOMMAX = 99;
int tableOutput[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
for (int i = 0; i < NUMBERS; i++) {
int temp = (int) (Math.random() * RANDOMMAX) + 1;
tableOutput[temp % 10]++;
}
for (int i = 1; i <= 10; i++) {
System.out.print(i + " - " + i * 10 + "| ");
for (int j = 0; j < tableOutput[i-1]; j++) {
System.out.print("*");
}
System.out.println();
}