Java空指针异常

Java空指针异常,java,arrays,object,pointers,nullpointerexception,Java,Arrays,Object,Pointers,Nullpointerexception,我得到了一个空指针异常,我无法考虑如何修复它。所讨论的数组是一个类数组,应该可以被使用它的方法访问 以下是主要方法: static Golfer[] golfList; static Course currentCourse; public static void main(String[] args) { System.out.println("Testing data integrity. Printing files:"); String golferData = re

我得到了一个空指针异常,我无法考虑如何修复它。所讨论的数组是一个类数组,应该可以被使用它的方法访问

以下是主要方法:

static Golfer[] golfList;
static Course currentCourse;

public static void main(String[] args) {
    System.out.println("Testing data integrity.  Printing files:");
    String golferData = readFile("scores.txt");
    String courseData = readFile("course.txt");
    parseGolferData(golferData);
    parseCourseData(courseData);
    printResults();
}
下面是创建和填充golflist数组的方法

public static void parseGolferData(String golfFileData){
    String[] firstSplit = golfFileData.split("\\\n");
    String[] secondSplit = firstSplit[1].split(", ");
    Golfer[] golfList = new Golfer[secondSplit.length];
    for (int i = 0; i < secondSplit.length; i++){
        System.out.println(secondSplit[i]);
        golfList[i] = new Golfer(secondSplit[i], 18);
        golfList[i].getName();
    }

    for (int i = 2; i<firstSplit.length; i++){
        String[] split = firstSplit[i].split(", ");
        for (int j = 0; j<split.length-1; j++){
            golfList[j].setScore(i-1, Integer.parseInt(split[j].replace(",","")));
        }
    }
}
publicstaticvoidparsegolferdata(字符串golfFileData){
字符串[]firstSplit=golfFileData.split(\\\n”);
字符串[]secondSplit=firstSplit[1]。拆分(“,”;
高尔夫球手[]高尔夫球手=新高尔夫球手[秒分长度];
对于(int i=0;i
这些阵列都是本地阵列:

String[] firstSplit = golfFileData.split("\\\n");
String[] secondSplit = firstSplit[1].split(", ");
Golfer[] golfList = new Golfer[secondSplit.length];
如果将这些数组定义为类数组,则代码应为:

firstSplit = golfFileData.split("\\\n");
secondSplit = firstSplit[1].split(", ");
golfList = new Golfer[secondSplit.length];

我还看到太多的静态方法。只有main()方法应该是静态的。如果您想使用类变量,所有其他方法都应该是类的一部分。

您正在通过在
parseGolferData()中重新说明类数组来隐藏它
。您初始化的数组是函数的本地数组,而不是类数组。因此,当您在
printResults()
中访问它时,会得到一个
NullPointerException

改变这个

Golfer[] golfList = new Golfer[secondSplit.length];


信息有限,但

golfList
parseGolferData

Golfer[] golfList = new Golfer[secondSplit.length];
这意味着一旦方法存在,引用就会丢失。这意味着
golfList
已经被声明,否则,
printfresults
中的语句将导致编译器错误

您似乎正在隐藏变量。请尝试在
parseGolferData
中更改
golfList
的初始化,使其看起来更像

golfList = new Golfer[secondSplit.length];
事实上,在这个方法中初始化的所有数组都可能遇到同样的问题


正如您所说,您可以通过将数组引用作为参数传递给其他方法来解决此问题…

除了其他方法之外,只要您执行以下操作:

 for (int i = 0; i<golfList.length; i++)
    {
        System.out.print(golfList[i].getName() + " | ");
    }

for(int i=0;igolfList被定义为一个类数组,称为static Golfer[]golfList;然后is被定义两次,一次是一个null的静态变量,另一次是局部变量。这非常有帮助。我没有注意到它已经隐藏。删除了Golfer[]并解决了这些问题。
golfList = new Golfer[secondSplit.length];
 for (int i = 0; i<golfList.length; i++)
    {
        System.out.print(golfList[i].getName() + " | ");
    }
 for (int i = 0; i<golfList.length; i++)
    {   
        if(golfList[i] != null)
        System.out.print(golfList[i].getName() + " | ");
    }