dfa*_*ken 0 java nullpointerexception
我正在编写课程代码.我们的意思是扫描用户指定的文件中的行,在每行中搜索用户指定的一个或多个单词,并报告整个文件(逐行处理)存在这些单词的次数.我们给了三个班,并打算写第四个.我的代码在第12行抛出NullPointerException,我不知道为什么.据我所知,我已经声明并初始化了该行中涉及的变量.我的代码是:
import java.io.IOException;
import java.util.*;
public class WordFreq extends Echo{
String[] searchWordsAsStrings;
WordCount[] searchWords;
public WordFreq(String f, String w) throws IOException{
super(f);
searchWordsAsStrings = w.split(" ");
for(int a = 0; a < searchWordsAsStrings.length; a++){
searchWords[a] = new WordCount("");
}
for(int a = 0; a < searchWordsAsStrings.length; a++){
searchWords[a].setWord(searchWordsAsStrings[a]);
}
}
public void processLine(String line){
StringTokenizer st = new StringTokenizer(line);
while(st.hasMoreTokens()){
for(int a = 0; a < searchWords.length; a++){
if(searchWords[a].getWord() == st.nextToken()){
searchWords[a].incCount();
}
}
}
}
public void reportFrequencies(){
System.out.println("Word counts:");
for(int a = 0; a < searchWords.length; a++){
System.out.println(searchWords[a].toString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
java.lang.NullPointerException
at WordFreq.<init>(WordFreq.java:12)
at FreqStudy.main(FreqStudy.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
Run Code Online (Sandbox Code Playgroud)
这个应用程序的主要类如下.我已经注释掉了给定的代码并提供了我自己的代码,以便诊断问题.
import java.util.*;
import java.io.*;
public class FreqStudy{
public static void main(String[] args) throws IOException
{
/*
Scanner scan = new Scanner(System.in);
System.out.println("enter file name");
String fileName = scan.next();
*/
String fileName = "pg37997.txt";
/*
Scanner scan2 = new Scanner(System.in);
System.out.println("enter words to search for");
System.out.println("enter lower case, separated by spaces");
String wordString = scan2.nextLine();
*/
String wordString = "cow horse chicken goat pig";
WordFreq f = new WordFreq(fileName,wordString);
f.readLines();
f.reportFrequencies();
}
}
Run Code Online (Sandbox Code Playgroud)
此应用程序还使用Echo和WordCount类,如下所示:
import java.util.Scanner;
import java.io.*;
public class Echo{
String fileName; // external file name
Scanner scan; // Scanner object for reading from external file
public Echo(String f) throws IOException
{
fileName = f;
scan = new Scanner(new FileReader(fileName));
}
public void readLines(){ // reads lines, hands each to processLine
while(scan.hasNext()){
processLine(scan.nextLine());
}
scan.close();
}
public void processLine(String line){ // does the real processing work
System.out.println(line);
}
}
public class WordCount{
private String word;
private int count;
public WordCount(String w){
word = w;
count = 0;
}
public String getWord(){
return word;}
public void setWord(String w){
word = w;
}
public int getCount(){
return count;}
public void incCount(){count++;}
public String toString() {
return(word + " --- " + count);
}
public boolean equals(Object other){
WordCount i = (WordCount)other;
return (this.word.equals(i.word));
}
}
Run Code Online (Sandbox Code Playgroud)
我确实无法追踪异常的来源.我已经阅读了生成它的内容(本网站上的许多解释),但我无法诊断实际代码中的异常是什么.
非常感谢.
您的问题是因为阵列初始化不正确!
WordCount[] searchWords;
Run Code Online (Sandbox Code Playgroud)
但你永远不会宣布 searchWords = new WordCount[dimension];
当您尝试引用此数组时,您尝试访问不存在的内容.因为WordCount[]它本身就是一个对象,所以它抛出一个NullPointerException因为它还没有引用一个WordCount[]对象.
| 归档时间: |
|
| 查看次数: |
400 次 |
| 最近记录: |