gpt4 book ai didi

java - 从文件中读取并插入到数组中

转载 作者:行者123 更新时间:2023-12-01 22:47:53 25 4
gpt4 key购买 nike

我有一个文件,我想读取这个文件(是大文件,有 10000 个单词),我想逐字添加并添加到数组中,我想计算该单词重复了多少次,但是我在添加时发现这个错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 101000 at salehproject.Array.insert(Array.java:35)

这是我的代码

public class Array<T> {
public T[] nodes;
int size;

public Array() {
size = 0;
nodes = (T[]) new Object[size];
}

public void insert(T e) {

for (int i = 0; i > nodes.length; i++) {
nodes[i + 1] = nodes[i];
}
nodes[size] = e;// here my error
size++;
}
}

这个类我读的时候

public class TextAnalyzer<T> {
Array<WData> AAlist = new Array<WData>();

private static class WData {

String word;
int freq;

public WData(String w, int f) {
word = w;
freq = f;
}

public Scanner sc;

public void processText(String filename) {
try {
sc = new Scanner(new File(filename));
while (sc.hasNext()) {
String line = sc.next();
String[] st = line.split(" ");
for (int i = 0; i < st.length; i++) {
processWord(st[i]);
AAlist.display();
}
}
} catch (FileNotFoundException ex) {
System.out.println("error in loadstudends Scanner");
}
}

public void processWord(String word) {
if (AAlist.size == 0) {
AAlist.insert(new WData(word, 1));
} else {
for (int i = 0; i < AAlist.size; i++) {
if (AAlist.nodes[i].word.equalsIgnoreCase(word)) {

if (AAlist.size == 0) {
AAlist.insert(new WData(word, 1));
} else {
AAlist.nodes[i].freq += 1;
}
}
}
}
}
}
}

实际上我试图解决这个问题,但我不知道是否有人可以帮助我

最佳答案

你的问题是循环。首先

for (int i = 0; i > nodes.length; i++) {..}

变量i永远不会大于nodes.length,因为是0

第二

nodes[i + 1] = nodes[i];

不起作用。如果i=0,您将在第二个位置指定第一个元素,但在下一次迭代中,您希望指定从第二个位置到第三个位置的数据,但第二个位置被第一个位置的数据覆盖。这里需要一个临时变量来复制数组数据。

第三

您将遇到问题 nodes = (T[]) new Object[size]; 您将得到 ClassCastException。

你的代码应该是这样的:

import java.lang.reflect.ParameterizedType;

public class Array<T> {
public T[] nodes;
Class<T> persistentClass;
int size;

@SuppressWarnings("unchecked")
public Array() {
size = 0;
ParameterizedType paramType = (ParameterizedType) this.getClass().getGenericSuperclass();
persistentClass = (Class<T>) paramType.getActualTypeArguments()[0];
}

public void insert(T e) {
T[] tempNodes = (T[]) java.lang.reflect.Array.newInstance(persistentClass, size + 1);
for (int i = 0; i < size; i++) {
tempNodes[i] = nodes[i];
}
nodes = tempNodes;
nodes[size] = e;
size++;
}
}

关于java - 从文件中读取并插入到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58466656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com