0

我正在遍历文件并获取每个单词中的字符数。当我找到每个单词的长度时,它将字符数量的 int 值放入该数组索引位置。我不知道为什么或如何解决它。然后我什至尝试重新遍历数组并将每个 int 除以它的索引位置,但无法弄清楚为什么我一直得到 / by 0 异常。下面是我的代码。我使用的 txt 文件有 1 个两个字母的单词和 2 个三个字母的单词。输出为 2 个字符的单词频率为 2(应为 1)和 3 个字符的单词频率为 6(应为 2)。对于这个分配,我们只需要计算所有单词 <23 个字符的频率并将所有超过 23 个字符的字符分组到最后一个数组索引位置。下面是我的代码。任何帮助将不胜感激。

    private final int WORDLENGTH = 23;
    private int[] wordLengthCount = new int [WORDLENGTH];

    while (token.hasMoreTokens()){
            token1 = token.nextToken();
            for (int t = 0; t<token1.length(); t++){
                wordLengthCount[token1.length()-1]++;
                }
4

2 回答 2

0
while(token.hasMoreTokens()){
    token1 = token.nextToken();
    wordLengthCount[token1.length()-1]+=1;
}

您不需要为每个标记遍历每个字符。只需引用您正在检查的单词中的字母数所引用的数组中的索引。

所以在这里你会看到一个 3 个字母的单词:

wordLengthCount[3 -1] +=1;
//so wordLengthCount[2] = 1 now

或者对于 2 个字母的单词:

wordLengthCount[2 -1] +=1;
//so wordLengthCount[1] = 1 now.

如果您想知道字符数,可以通过将您正在检查的元素的索引乘以该索引的值来获得它们,如下所示:

//this will give you number of 3 letter word characters in file.
wordLengthCount[2] *= 3;
//or more useful, print out all frequencies and the number of characters in file
//which contributed to frequency
for(int i=0;i<wordLengthCount.length;i++){
    System.out.println("Frequency for "+(i+1)+" letter words = "
        +wordLengthCount[i]+", characters = "+(wordLengthCount[i]*(i+1)));
}
于 2013-07-16T04:12:08.043 回答
0

这段代码在这里

token1 = token.nextToken();                    //Getting your token
    for (int t = 0; t<token1.length(); t++)    //For each character in token
    {
        wordLengthCount[token1.length()-1]++;  //Increment count array
    }

正在为您的String token1. 因此

1 * 2 character word = 2
2 * 3 character word = 6

您在这里不需要for循环,只需在while循环中执行此操作

token1 = token.nextToken();              //Get token
wordLengthCount[token1.length()-1]++;    //Increment your count array
于 2013-07-16T04:13:05.080 回答