java - 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
(没有其他内置函数,但强烈建议将正则表达式也用于其余的作业)。我在上面放了一个私人的FileReader
,BufferedReader
因为我想看看他们是否会更好地工作。感谢您的建议!
解决方案
在这个循环中:
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));
}
推荐阅读
- jenkins - 将 Jenkins 与 Black Duck Hub 一起使用
- android - ffmpeg 4.0.2 中缺少许多编解码器,该怎么办?
- ios - iPhone 不振动
- ssl - 邮递员未发送客户证书
- command-line - Picocli:如何始终显示标题/横幅
- javascript - 选中 razorview 表中的所有复选框
- hadoop - cloudera director 客户端安装
- c - 如何使用 Doxygen 将我的 C 代码视为面向对象?
- c# - 插入后计算的主键不会在 EF Core 实体中更新
- node.js - 如何在 Strapi 中使用 CRSF 和 XSS 保护