我必须计算文本文件中字符串的长度,并计算它们出现的频率。我可以计算长度,但我的频率计数器总是关闭,我不知道为什么。
说我用这些词传递了一个文件: reinflates, misorders, 停药, gastness,和 履带齿片
我的程序注册2个长度为8的字符串实例(正确)和2个长度为16的字符串实例(错误只有一个),它甚至不识别10个字母的单词和9个字母的单词。我们也不允许使用ArrayList,所以我们必须自己调整数组的大小。
这是我的代码:
int [] histogram = new int[0];
// while loop to read all words into your String[]
// and update all the freq counter for word lengths
while(infile.ready())
{
String word = infile.readLine();
if (word.length() >= histogram.length){
int [] newHistogram = new int [word.length()+1];
for (int p=0;p<histogram.length;p++){
histogram[p]=newHistogram[p];
}
newHistogram[word.length()]++;
histogram=newHistogram;
}
if (word.length() < histogram.length){
histogram[word.length()]++;
}
}
答案 0 :(得分:1)
解决此问题,
for (int p=0;p<histogram.length;p++)
{
newHistogram[p]=histogram[p]; //swapped around
}
这个,
if (word.length() >= histogram.length)
{
....
}
else // introduced
if (word.length() < histogram.length){
histogram[word.length()]++;
}
答案 1 :(得分:0)
编辑(感谢mockinterface): 您需要更改复制新直方图的for循环:
for (int p=0;p<histogram.length;p++){
newHistogram[p] = histogram[p];
}
所以你复制新的直方图。
您需要将第二个if
条件更改为else
。
如果单词的长度大于直方图的长度:
在第一个if
中,您创建一个word.length+1
长度的新直方图,将旧的直方图复制到那里并增加histogram[word.lenth]
。
然后您达到第二个if
条件,现在histogram.length
大于word.length
(因为您在之前的if
中更改了它),因此您增加了histogram[word.lenth]
再次。