Я пишу программу, которая выделяет ряд слов, разделенных на токены, и читает текст, а затем подсчитывает их частоты. Этот код имеет несколько связанных кодов (WordCount, FreqStudy и Echo), но класс WordFreq вызывает ошибку java.lang.NullPointerException. Вот мой код WordFreq:java.lang.NullPointerException, не могу понять почему?
import java.util.*;
import java.io.*;
public class WordFreq extends Echo{
WordCount[] wcArray;
int ct;
String[] sentence;
double freq;
String newLine;
public WordFreq(String f, String words) throws IOException{
super(f);
String[] wordString = words.split(" ");
for(int i=0; i<wordString.length; i++)
wcArray[i] = new WordCount(wordString[i]);
Scanner scan = new Scanner(new FileReader(fileName));
}
public void processLine(String line){
newLine = line.toLowerCase();
sentence = newLine.split(" ");
for(String s: sentence){
for(WordCount w: wcArray){
if(w.getWord().equals(s))
w.incCount();
}
ct++;
}
}
public void reportFrequencies(){
for (int i=0; i<wcArray.length; i++){
freq = (wcArray[i].getCount()/ct);
System.out.print(wcArray[i].getWord()+" ");
System.out.printf("%6.4f\n", freq);
}
}
}
И ошибка я получаю, как выглядит это, когда я даю ему файл для чтения через FreqStudy основного класса:
java.lang.NullPointerException
at WordFreq.<init>(WordFreq.java:17)
at FreqStudy.main(FreqStudy.java:14)
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)
Я действительно не понимаю, что проблема в том, и я работал над этим весь день, поэтому я чувствую себя мертвым. Пожалуйста, посмотрите, можете ли вы, я бы очень признателен.
EDIT: Я понял, что я не инициализировал его сразу после публикации, но мои частоты возвращают 0 результатов. Кто-нибудь поможет?
Это возвращает 0, а также возвращает счетчик 0. –
Инициируйте double ct = 0.0 или 1.0 и отлаживайте свой код, почему getCount возвращает 0. – Smit
@EmmaHyde Если отладка не работает, создайте другое сообщение, включая класс 'WordCount' и как вызывается методы в WordFreq. – Reimeus