我正在从文本文件中读取整数值,并将它们存储在10 ex,1-10,11-20的组中,并且像数组一样存储。我需要在一行上打印一个星号,表示每组中有多少个数字:
1-10 *******
11-20 ************
我已编码了所有内容,但我无法正确打印输出。我试图使用嵌套for循环,但没有太多运气。
public class Main {
public static void main(String[] args) throws FileNotFoundException {
int fileInts;
Scanner scan = new Scanner(new File("Histogram.txt"));
int[] count = new int[10];
// while loop
while (scan.hasNext()) {
// find next line
String num = scan.next();
fileInts = Integer.parseInt(num);
if (fileInts > 0 && fileInts < 11) {
count[0]++;
} else if (fileInts > 10 && fileInts < 21) {
count[1]++;
} else if (fileInts > 20 && fileInts < 31) {
count[2]++;
} else if (fileInts > 30 && fileInts < 41) {
count[3]++;
} else if (fileInts > 40 && fileInts < 51) {
count[4]++;
} else if (fileInts > 50 && fileInts < 61) {
count[5]++;
} else if (fileInts > 60 && fileInts < 71) {
count[6]++;
} else if (fileInts > 70 && fileInts < 81) {
count[7]++;
} else if (fileInts > 80 && fileInts < 91) {
count[8]++;
} else if (fileInts > 90 && fileInts < 101) {
count[9]++;
}
}
for (int s : count) {
{
for (int c = 0; c < count[c]; c++) {
System.out.print("*");
System.out.println();
s++;
}
}
//System.out.println(count[]);
}
}
}
答案 0 :(得分:0)
首先,你应该只使用
count[fileInts / 10]++;
而不是这个veeery长if-else块。对整数进行除法总是只给出整数值,而不是浮点数。如果您需要剩余的值,请使用模数%。
回答你的问题:你的第二个循环只会遍历列表中的元素,而不是每个单个字符。你期望例如21是2个字符,不是这种情况,因为你只计算整数 - 不计算每个整数中的十进制数。
答案 1 :(得分:0)
你的循环必须是这样的:
for (int s : count) {
{
for (int c = 0; c < s; c++) {
System.out.print("*");
}
System.out.println();
}
}
用简单的英语思考这个过程:
其他说明:
内圈内的 System.out.println();
在每个星星后面打印一个新行。那不是你想要的。您执行想要在打印一个范围的星星后打印新行。
在你的循环中,你正在将计数器变量c
与count[c]
进行比较,这是没有意义的。您需要将其与您正在使用的当前整数(您已定义为s
)进行比较。
当您尝试推断某个过程在程序中的工作方式时,它可以帮助您记下一组输入数据并手动完成。我知道我通过改组一副牌并完成它们来学习常见的排序算法。
答案 2 :(得分:0)
要在计算出某个范围内的每个数字的次数后循环播放数组,请执行以下操作:
for (int i = 0; i < count.length; i++)
{
for (int j = 0; j < count[i]; j++)
System.out.print("*");
System.out.println("");
}
但这有另一个问题,你无法看到你在计算哪些数字。创建一个具有数字范围的String数组可能是一个想法:
String[] ranges = {"1 - 10: ", "11 - 20: ", ... , "90 - 100: " };
然后改变你的循环以首先打印出适当的范围:
for (int i = 0; i < count.length; i++)
{
System.out.print(ranges[i]);
for (int j = 0; j < count[i]; j++)
System.out.print("*");
System.out.println();
}