Java 读取文本文件并将其存储在arraylist中时出现空指针错误

Java 读取文本文件并将其存储在arraylist中时出现空指针错误,java,arraylist,text-files,filereader,Java,Arraylist,Text Files,Filereader,我也为它写了一个main方法,但是我不能说出错误的来源。这是我正在使用的代码: import java.io.*; import java.util.*; public class WordList{ private ArrayList<String> words; public WordList(String filename){ ArrayList<String> words = new ArrayList<String>(); } publi

我也为它写了一个main方法,但是我不能说出错误的来源。这是我正在使用的代码:

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.*;
导入java.util.*;
公共类词表{
私人ArrayList词;
公共字列表(字符串文件名){
ArrayList words=新的ArrayList();
}
公共ArrayList openFile(字符串文件名)引发IOException{
FileReader fr=新的FileReader(文件名);
//创建Filereader对象
BufferedReader textReader=新的BufferedReader(fr);
//创建一个BR对象
String line=textReader.readLine();
while(textReader.readLine()!=null){
添加(行);
textReader.readLine();
}
textReader.close();
返回单词;
}
随机r=新随机();
公共字符串getRandomWord(){
字符串x=新字符串();
int y=r.nextInt(words.size());
x=单词。获取(y);
返回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());
  }
 }
}
import java.io.*;
导入java.util.*;
公开课考试{
公共void main(字符串args[])引发IOException{
String path=“C:/Users/Cyril/Desktop/COMP 202/Assignment 4/Text files/Majors.txt”;
试一试{
单词列表=新单词列表(路径);
ArrayList majors=新的ArrayList();
majors=list.openFile(路径);
系统输出打印(专业);
}
捕获(IOE异常){
System.out.println(e.getMessage());
}
}
}
我得到一个空指针错误。我找不到它的来源。 我的问题是:

编写一个带有私有arraylist的类单词列表,该列表读取文本文件,并将每一行作为条目存储在arraylist中。
我已经添加了random方法来从arraylist生成随机单词。

您已经声明了一个局部变量,该变量会隐藏实例成员

public WordList(String filename){
    ArrayList<String> words = new ArrayList<String>();
}

您正在从输入流中读取3行。这就是您想要的吗?

您已经声明了一个局部变量,该变量会隐藏实例成员

public WordList(String filename){
    ArrayList<String> words = new ArrayList<String>();
}

您正在从输入流中读取3行。这就是您想要的吗?

您已经声明了一个局部变量,该变量会隐藏实例成员

public WordList(String filename){
    ArrayList<String> words = new ArrayList<String>();
}

您正在从输入流中读取3行。这就是您想要的吗?

您已经声明了一个局部变量,该变量会隐藏实例成员

public WordList(String filename){
    ArrayList<String> words = new ArrayList<String>();
}

您正在从输入流中读取3行。这就是您想要的吗?

您在构造函数中声明了一个与实例变量同名的局部变量,而不是分配实例变量。
因此,在构造函数中将声明更改为赋值,如下所示

public WordList(String filename){
   words = new ArrayList<String>();
}
公共单词列表(字符串文件名){
words=newarraylist();
}

您在构造函数中声明了一个与实例变量同名的局部变量,而不是分配实例变量。
因此,在构造函数中将声明更改为赋值,如下所示

public WordList(String filename){
   words = new ArrayList<String>();
}
公共单词列表(字符串文件名){
words=newarraylist();
}

您在构造函数中声明了一个与实例变量同名的局部变量,而不是分配实例变量。
因此,在构造函数中将声明更改为赋值,如下所示

public WordList(String filename){
   words = new ArrayList<String>();
}
公共单词列表(字符串文件名){
words=newarraylist();
}

您在构造函数中声明了一个与实例变量同名的局部变量,而不是分配实例变量。
因此,在构造函数中将声明更改为赋值,如下所示

public WordList(String filename){
   words = new ArrayList<String>();
}
公共单词列表(字符串文件名){
words=newarraylist();
}
更改

public WordList(String filename) {
    ArrayList<String> words = new ArrayList<String>();
}
公共单词列表(字符串文件名){
ArrayList words=新的ArrayList();
}

公共单词列表(字符串文件名){
words=newarraylist();
}
因为您在构造函数中隐藏了实例成员
words
words
未初始化,默认为
null
null。有些东西是
NullPointerException
更改

public WordList(String filename) {
    ArrayList<String> words = new ArrayList<String>();
}
private ArrayList<String> words;

public WordList(String filename){
ArrayList<String> words = new ArrayList<String>();
}
公共单词列表(字符串文件名){
ArrayList words=新的ArrayList();
}

公共单词列表(字符串文件名){
words=newarraylist();
}
因为您在构造函数中隐藏了实例成员
words
words
未初始化,默认为
null
null。有些东西是
NullPointerException
更改

public WordList(String filename) {
    ArrayList<String> words = new ArrayList<String>();
}
private ArrayList<String> words;

public WordList(String filename){
ArrayList<String> words = new ArrayList<String>();
}
公共单词列表(字符串文件名){
ArrayList words=新的ArrayList();
}

公共单词列表(字符串文件名){
words=newarraylist();
}
因为您在构造函数中隐藏了实例成员
words
words
未初始化,默认为
null
null。有些东西是
NullPointerException
更改

public WordList(String filename) {
    ArrayList<String> words = new ArrayList<String>();
}
private ArrayList<String> words;

public WordList(String filename){
ArrayList<String> words = new ArrayList<String>();
}
公共单词列表(字符串文件名){
ArrayList words=新的ArrayList();
}

公共单词列表(字符串文件名){
words=newarraylist();
}
因为您在构造函数中隐藏了实例成员
words
words
未初始化,默认为
null
null。有些东西是
NullPointerException

私有数组列表单词;
private ArrayList<String> words;

public WordList(String filename){
ArrayList<String> words = new ArrayList<String>();
}
公共字列表(字符串文件名){ ArrayList words=新的ArrayList(); }
在代码的这一部分中,构造函数正在创建另一个数组列表,而类中的数组列表(实例变量)没有链接到它

请将代码更改为:

private ArrayList<String> words;

public WordList(String filename){
this.words = new ArrayList<String>();
}
私有数组列表词;
公共字列表(字符串文件名){
this.words=new ArrayList();
}
然后它应该可以工作:)

私有数组列表单词;
公共字列表(字符串文件名){
ArrayList words=新的ArrayList();
}
在代码的这一部分中,构造函数正在创建另一个数组列表,而类中的数组列表(实例变量)没有链接到它

请将代码更改为:

private ArrayList<String> words;

public WordList(String filename){
this.words = new ArrayList<String>();
}
私有数组列表词;
公共字列表(字符串文件名){
this.words=new ArrayList();
}
它应该是