首页 > 解决方案 > Java ArrayIndexOutOfBoundsException 在尝试查找文件中出现次数最多的单词时不断出现

问题描述

我目前正在构建一个程序,它读取文件并打印出现次数最多的单词以及每个单词出现的次数,如下所示:

package WordLookUp;

import java.util.*;
import java.io.*;
import java.lang.*;

public class WordLookUp {

    private String[] mostWords;
    private Scanner reader;
    private String line;
    private FileReader fr;
    private BufferedReader br;
    private List<String> original;
    private String token = " ";


    public WordLookUp(String file) throws Exception {
        this.reader = new Scanner(new File(file));
        this.original = new ArrayList<String>();



        while (this.reader.hasNext()) { //reads file and stores it in string
            this.token = this.reader.next();
            this.original.add(token); //adds it to my arrayList
        }


    }

    public void findMostOccurringWords() {
        List<String> mostOccur = new ArrayList<String>();
        List<Integer> count = new ArrayList<Integer>();
        int counter = 0;


        this.mostWords = this.token.split(" "); //storing read lines in mostWords arrayList

        try {

        for (int i = 0; i < original.size(); i++) {
            if (this.original.equals(this.mostWords[i])) { 
                counter++; //increase counter
                mostOccur.add(this.mostWords[i]);
                count.add(counter);
            }
        }

        for (int i = 0; i < mostOccur.size(); i++) {
            System.out.println("Word: " + mostOccur.get(i) + " count: " + count.get(i));
        }

        } catch (ArrayIndexOutOfBoundsException ae) {
            System.out.println("Illegal index");
        }
    }






}


package WordLookUp;

import java.util.*;
import java.io.*;


public class Main {

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub


        WordLookUp wL = new WordLookUp("tiny1.txt");

        wL.findMostOccurringWords();



    }

}

所以当我继续运行我的文件时,它会抛出我给它的异常:“非法索引”。我认为这是我的findMostOccuringWords方法。对我来说,逻辑感觉是正确的,但我不知道为什么它会抛出ArrayIndexOutOfBoundsException. 我尝试使用 for 循环并尝试退出,int i = 0 to i < mostOccur.size() - 1但这也不起作用。我的逻辑错了吗?我不允许使用 ahashmap并且我们的教授给了我们一个提示,我们可以使用数组和轻松地完成这项作业ArrayLists(没有其他内置函数,但强烈建议将正则表达式也用于其余的作业)。我在上面放了一个私人的FileReaderBufferedReader因为我想看看他们是否会更好地工作。感谢您的建议!

标签: javaarrayseclipsearraylistindexoutofboundsexception

解决方案


在这个循环中:

for (int i = 0; i < mostOccur.size(); i++) {
     System.out.println("Word: " + mostOccur.get(i) + " count: " + count.get(i));
}

您检查以确保i在范围内mostOccur但不在count. 我会添加一个条件来检查以确保它在界限内。如:

for (int i = 0; i < mostOccur.size() && i < count.size(); i++) {
     System.out.println("Word: " + mostOccur.get(i) + " count: " + count.get(i));
}

推荐阅读