java数组越界和空指针异常
我得到一个数组越界异常。我知道它是空的,因为数组是空的,但是在我尝试使用它的内容之前,我检查了长度。但它甚至不会进行检查,因为它说数组导致空指针异常。有人知道为什么要吐这个吗
这是密码
private void createGroupTree(ArrayList<String> groupList) throws JWNLException {
WordNetMeasures wordNet = new WordNetMeasures();
String[] wordResult;
for(int i = 0; i<groupList.size(); i++) {
wordResult = wordNet.getWordNetPath(groupList.get(i));
if(wordResult.length == 0) {
graph.addVertex(groupList.get(i));
} else {
for(int j=0; j<wordResult.length; j++) {
if(j !=wordResult.length-1) {
graph.addEdge(edgeFactory.create(), wordResult[j], wordResult[j+1]);
}
}
}
}
}
下面是导致此问题的getWordNetPath方法的代码。我知道列表中的一些单词不在正在使用的词典中,我只是不知道如何处理这些单词
public String[] getWordNetPath(String word) throws JWNLException {
RiWordnet wordnet = new RiWordnet();
//String wordOne = "dog";
String[] posOfWord = wordnet.getPos(word);
int[]wordIds = wordnet.getSenseIds(word, posOfWord[0]);
String[] wordResults = wordnet.getHypernymTree(wordIds[0]);
return wordResults;
}
# 1 楼答案
明白了。必须在整个代码块周围添加一个try-catch。这意味着对于字典中未包含的单词,将捕获NullPointerException,并将其移动到列表中的下一个单词
兼容的单词将添加到图形中,不兼容的单词将不添加
# 2 楼答案
如果
wordNet.getWordNetPath(groupList.get(i));
返回null
,则当代码尝试计算wordResult.length
时,将在下一个语句中导致NullPointerException
。您应该将if
更改为:您必须发布堆栈跟踪,以便我们诊断数组越界异常。您发布的代码不应该生成该代码(尽管它可能来自您正在调用的某个方法)。{cd7}除了内部循环之外,您还可以通过重写
编辑:根据您关于数组边界异常来自此行的评论:
我怀疑
groupList.get(i)
返回的某个值导致getWordNetPath
抛出异常。答案就在你没有发布的代码中。如果您不想费心追踪异常源,只想在抛出异常时允许程序继续运行,您可以简单地捕获它:如果有时也会从
getWordNetPath
抛出NullPointerException
,那么也可以为此添加第二个catch
子句