字频率计算中的ArrayIndexOutOfBoundsException

时间:2014-10-31 06:39:27

标签: java exception indexoutofboundsexception

这是我对词频的逻辑。我不应该使用HashMap来存储单词的频率。我得到ArrayIndexoutofBoundsException,但无法找出原因。

程序:

package thirdassignments;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class WordFreq2 {

    public void Working() {
        try {
            File file = new File("C:/Users/kishansr/Desktop/file1.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuffer stringBuffer = new StringBuffer();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                stringBuffer.append(line);
                stringBuffer.append("\n");
            }
            fileReader.close();

            String sentence = stringBuffer.toString();
            String [] words = sentence.split("\\s+"); // splits by whitespace
            for (String word : words) {
                System.out.println(word);
            }

            String word1[] = new String [100000];
            int count[] = {0}, count1 = 0;
            for (String word : words) {
                count1 = count1 + 1;
            }
            System.out.println("COunt :" + count1);
            for (String word : words) {
                for (int i = 0 ; i < count1 ; i++) {
                    if (word1[i] != word) {
                        word1[i] = word;
                        count[i] = 1; // here the exception is oocuring
                    }

                    else if (word1[i] == word) {
                        count[i] = count[i] + 1;
                    }
                }
            }
            for (int i = 0 ; i < count1 ; i++) {
                System.out.println(count[i] + " : " + word1[i]);
            }

        }
        catch (IOException e1) {
            e1.printStackTrace();
        }
    }

    public static void main(String [] args) {
        // TODO Auto-generated method stub
        WordFreq2 wf = new WordFreq2();
        long startruntime = System.nanoTime();
        wf.Working();
        long endruntime = System.nanoTime();
        System.out.println( "start time: " + startruntime + " end time :" + endruntime + " diferrence: " + (endruntime - startruntime));
    }

}

输出:

  


  是
  该
  惠普
  惠普
  公司
  。
  这
  公司
  是
  传播
  在
  该
  世界
  和
  有
  建立
  其
  脚印
  在
  几乎
  所有
  国家
  。
  它
  有
  一个
  巨大
  员工
  计数
  和
  有
  更
  女性
  员工
  比
  男性
  员工
  。
  COunt:39
  线程&#34; main&#34;中的例外情况java.lang.ArrayIndexOutOfBoundsException:1

2 个答案:

答案 0 :(得分:1)

你的计数数组:

int count[]={0};

有一个元素

因此,对于任何i&gt; 0,您将获得count [i]的例外。

也许您应该将其初始化为与word1数组相同的长度:

int count[]= new int[100000];

此外,将word1[i]==word替换为word1[i].equals(word)

答案 1 :(得分:1)

您已经实例化了count[]数组,其大小为1.它必须至少与您的数组一样大。

尝试更改此行

 String word1[]=new String[100000];
 int count[]={0},count1=0;
 for (String word : words) {
     count1=count1+1;
 }

 String word1[]=new String[100000];
 int count1=0;
 for (String word : words) {
     count1=count1+1;
 }
 count[]= new int[count1];