【发布时间】:2017-02-26 20:47:19
【问题描述】:
我正在尝试编写一个 Java 程序,该程序会为数组中每次出现的值生成一个星号直方图。
如果元素分别为 0、1、2、3、4、5、6、7、8、9,则输出应在每次出现时都有一个星号。例如,
0:*
1:*
2:*
3:*
4:*
5:*
6:*
7:*
8:*
9:*
但是,我的输出是
0:**********
1:
2:
3:
4:
5:
6:
7:
8:
9:
下面的代码是我自己的。
public static void drawHistogram(double[] array) {
String count = "";
for (int i = 0; i < array.length; i++) {
if (array[i] >= 0 && array[i] < 1) {
count += "*";
} else if (array[i] >= 1 && array[i] < 2) {
count += "*";
} else if (array[i] >= 2 && array[i] < 3) {
count += "*";
} else if (array[i] >= 3 && array[i] < 4) {
count += "*";
} else if (array[i] >= 4 && array[i] < 5) {
count += "*";
} else if (array[i] >= 5 && array[i] < 6) {
count += "*";
} else if (array[i] >= 6 && array[i] < 7) {
count += "*";
} else if (array[i] >= 2 && array[i] < 8) {
count += "*";
} else if (array[i] >= 2 && array[i] < 9) {
count += "*";
} else if (array[i] >= 9 && array[i] < 10) {
count += "*";
} else if (array[i] >= 10 && array[i] < 11) {
count += "*";
}
}
for (int j = 0; j <= 10; j++) {
System.out.print(j + count);
count = "";
System.out.println();
}
}
我该如何解决这个问题?
【问题讨论】:
-
看起来你只记一个数。您希望如何仅通过一次计数来跟踪多个值?
-
我建议添加一个名为 countStrings[] 的新字符串数组,其中元素 0 跟踪小于 1 的值的计数,元素 1 跟踪小于 2 的值的计数,依此类推.在每个
if条件的代码中,您将在数组中的相应元素上附加一个星号。例如,如果array[i] >= 3 && array[i] < 4,您将执行语句countStrings[3] += "*"; -
您可以使用
Math.floor函数进一步简化代码,并去掉所有if-then-else 语句。 -
类似
countStrings[Math.floor(array[i])) += "*"; -
Math.floor只是将双精度数转换为下一个最小整数。所以Math.floor(3.5)将是 3。
标签: java arrays loops methods histogram