2015-11-07 37 views
1

我有一个包含这样的信息的文件: table of the data具有麻烦从文件中提取数据,劈裂它并将其存储到数组/数组列表

的行数而变化。教授正在使用其他文件来测试该程序。

我想从此文件中提取长名称并将其打印出来。

以下是我有:

public List<String> extractName(List<String> longName) 
{ 
    Data data = new Data(); 
    Scanner scan = new Scanner(actualFile); 
    longName = new List<String>(); 
    String line = scan.nextLine(); 

    if(line.contains("---")) 
     { 
     while(line != null) 
     { 
     String[] name = line.split(" +"); 
     longName.add(name[2]); 
     } 
    data.setLongName(longName); 
    } 
    return longName; 
} 

和我main方法和另外一个方法:

public static void main(String[] args) throws FileNotFoundException{ 
    //process file 
     try{ 
      File actualFile = new File(args[0]); 
      System.out.println("File was processed: true"); 
     } 
     catch (ArrayIndexOutOfBoundsException e) 
      { 
       System.out.println("File was processed: false. Re-enter filename."); 
       return; 
      } 
     Data data = new Data(); 
     printInfo(data); // error occurs here 
    } 

    public static void printInfo(Data d){ 
     for(int i = 0; i < longName.size(); i++) //error occurs here 
      System.out.println(longName.get(i)); 

    } 

和我的班,万一有人需要它:

public class Data{ 

    private List<String> longName; 

    public void Data(){} 

    public void setLongName(List<String> theLongName){ 
     longName = theLongName; 
    } 
    public List<String> getLongName(){ 
     return longName; 
    } 
} 

但是当我运行它,我得到这个错误:

Exception in thread "main" java.lang.NullPointerException 
    at project2shm.printInfo(project2shm.java:35) 
    at project2shm.main(project2shm.java:18) 

我很困惑。我标记了代码中发生错误的位置。任何人都可以帮助我吗?

+0

我猜你的'printInfo'和'main'方法在你的'Data'类中。在那张纸上,你正在将'Data d'传递给'printInfo',但你实际上并没有使用它。你会得到NullPointer,因为显然'longName'是NULL。现在假设'printInfo'和'main'方法在你的'Data'类中,最好使用'd.longName.size()',并且更好地将它包装在NULL检查IF条件内。但是你仍然会得到NP,因为你的'd.longName'仍然是NULL,所以你需要确保你正在实例化它。 – hagrawal

+0

你在哪里调用'extractName'? – sam

回答

1

project2shm.main()从不为project2shm.printInfo()使用的longName变量赋值。 longName变量显然是project2shm类中的一个静态变量。

您没有为project2shm提供整个源,但它要么不初始化longName,或分配null它。无论哪种情况,这都会导致你看到的NPE。

相关问题