我也为它编写了一个主要的方法,但我无法告诉错误的来源。这是我正在使用的代码:
import java.io.*;
import java.util.*;
public class WordList{
private ArrayList<String> words;
public WordList(String filename){
ArrayList<String> words = new ArrayList<String>();
}
public ArrayList<String> openFile(String filename) throws IOException{
FileReader fr= new FileReader(filename);
//create a Filereader object
BufferedReader textReader= new BufferedReader(fr);
//create a BR object
String line = textReader.readLine();
while (textReader.readLine() != null){
words.add(line);
textReader.readLine();
}
textReader.close();
return words;
}
Random r= new Random();
public String getRandomWord(){
String x= new String();
int y=r.nextInt(words.size());
x= words.get(y);
return x;
}
}
这是我用来测试代码的主要方法:
import java.io.*;
import java.util.*;
public class Test{
public void main(String args[])throws IOException{
String path= "C:/Users/Cyril/Desktop/COMP 202/Assignment 4/Text files/Majors.txt" ;
try {
WordList list = new WordList(path);
ArrayList<String> majors = new ArrayList<String>();
majors = list.openFile(path);
System.out.println(majors);
}
catch (IOException e){
System.out.println( e.getMessage());
}
}
}
我收到空指针错误。我找不到它的来源。 我的问题是:
使用私有arraylist编写一个类WordList,该arraylist读取文本文件并将每一行存储为arraylist中的条目。 我添加了随机方法来生成arraylist中的随机单词。
答案 0 :(得分:3)
您已声明了一个隐藏实例成员的局部变量
public WordList(String filename){
ArrayList<String> words = new ArrayList<String>();
}
更改为
public WordList(String filename){
words = new ArrayList<String>();
}
But also see Kugathasan's answer...which they just deleted.
此代码段
String line = textReader.readLine();
while (textReader.readLine() != null){
words.add(line);
textReader.readLine();
}
您正在从输入流中读取3行。这就是你想要的吗?
答案 1 :(得分:0)
您在构造函数中声明一个与实例变量同名的局部变量,而不是分配实例变量。
因此,在构造函数中将声明更改为赋值,就像这样。
public WordList(String filename){
words = new ArrayList<String>();
}
答案 2 :(得分:0)
更改
public WordList(String filename) {
ArrayList<String> words = new ArrayList<String>();
}
到
public WordList(String filename) {
words = new ArrayList<String>();
}
由于您已在构造函数中隐藏了实例成员words
,因此words
未初始化,默认为null
且null.Something
为NullPointerException
答案 3 :(得分:0)
private ArrayList<String> words;
public WordList(String filename){
ArrayList<String> words = new ArrayList<String>();
}
在代码的这一部分中,构造函数正在创建另一个数组列表,而类中的一个(实例变量)没有链接到它。
请将您的代码更改为:
private ArrayList<String> words;
public WordList(String filename){
this.words = new ArrayList<String>();
}
它应该起作用:))