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() + " | ");
}