无法正确计算直方图

时间:2014-02-02 02:34:11

标签: java histogram

我必须计算文本文件中字符串的长度,并计算它们出现的频率。我可以计算长度,但我的频率计数器总是关闭,我不知道为什么。

说我用这些词传递了一个文件: 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()]++;
    }
}

2 个答案:

答案 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]再次。