搜索数组时出现NullPointerException错误

时间:2014-10-23 17:46:44

标签: java arrays nullpointerexception

我正在尝试运行此代码。它成功读取文件,但在单词搜索本身中断。

错误:

Exception in thread "main" java.lang.NullPointerException
        at WordSearch.main(WordSearch.java:30)  

以下是代码:

import javax.swing.JOptionPane;
import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;


public class WordSearch{

public static void main(String[] args) throws FileNotFoundException{

    String searchWord, fileName; int i=0, j=0;

    fileName = JOptionPane.showInputDialog(null, "Please enter the name of the file to be processes: ");
    File textFile = new File(fileName);

    Scanner scanner = new Scanner(textFile);

    String[] file = new String[500];
    String[] found = new String[500]; 

    while(scanner.hasNextLine()){
        file[i]=scanner.next();
        i++;
    }

    file[i+1]="EoA"; i=0;

    searchWord = JOptionPane.showInputDialog(null, "Please input the string to search for: ");

    while(!file[i].equals("EoA")){
        if (file[i].equals(searchWord)){
            if(i==0){
                found[j]=file[i]+file[i+1]+"\n";
            }
            else if(i==500){
                found[j]=file[i-1]+file[i]+"\n";
            }
            else {
                found[j]=file[i-1]+file[i]+file[i+1]+"\n";
            }

            j++;
        }
        i++;
    }

    JOptionPane.showMessageDialog(null, found);
}
}

2 个答案:

答案 0 :(得分:2)

更改

file[i+1]="EoA";

file[i]="EoA";

否则,您将在“EoA”条目之前的位置有一个空条目,这会导致NullPointerException

当然,您可以摆脱“EoA”条目,只需将循环条件更改为:

while (file[i] != null)

这更具可读性。

最后一件事,您如何保证您的输入不会超过数组的500长度?

答案 1 :(得分:0)

由于您的 i ++ 表达式,这种情况正在发生。在每次迭代中, i 正在递增,结果将存储在由 i

的值指向的先前索引中

可能的解决方案是在 while 循环中使用i-1