当我尝试添加和打印数组变量的值时,Console抛出异常:java.lang.NullPointerException

时间:2017-11-26 16:33:57

标签: java arrays eclipse file

我是一名从事作业的新手java程序员。但是,我遇到了一个小错误,我似乎无法弄明白。任何帮助将不胜感激。

在这个程序中,我试图读取文件并将文件数据存储在变量中,其数组大小等于文件中的行数。

例如:如果文件中有10行,那么变量的数组大小也应该是10.存储它们之后,我想显示它们。 (我已经知道如何显示数据)。

但我有java.lang.NullPointerException错误。

我认为我的代码中的错误存在于setVariable类的Athlete方法或readFile中的main函数中。

setVariable方法用于将从文件中提取的数据设置为数组类型变量(名字,姓氏,身份证号码,公民身份,时间)。

readFile函数用于从文件中读取数据,将该数据存储在临时变量中,并将临时变量的值作为参数发送到setVariable

该文件按相应顺序包含以下值: (“FirstName LastName IdNumber Citizenship Time”)

class Athlete
{
private

String[] firstName;
String[] lastName;
String[] citizen;
int[] id;
float[] time;

public
void Athlete(int s) //Setting the size of the array variables.
{
    firstName = new String[s];
    lastName = new String[s];
    citizen = new String[s];
    id = new int[s];
    time = new float[s];
}
void setVariables(String fName,String lName, int idNumber, String citizenship, float t, int lineNumber)
{
    firstName[lineNumber]=fName;
    lastName[lineNumber]=lName;
    id[lineNumber]=idNumber;
    citizen[lineNumber]=citizenship;
    time[lineNumber]=t;
    System.out.println(firstName[lineNumber]+"\t"+lastName[lineNumber]+"\t"+id[lineNumber]+"\t"+citizen[lineNumber]+"\t"+time[lineNumber]);
}
}

//Main CLASS
public class marathon {

static Scanner console;
static Scanner input = new Scanner (System.in);

public static void main(String[] args) {
    //STEP-1: FILE
    openFile(); //Step 1.1: Open the File
    System.exit(0);
}

static void openFile()
{
    try
    {
        console = new Scanner (new File("C:/Eclipse_Wokspace/Assignment-2/src/Marathon.txt"));
        //Step 1.2: Read the File
        readFile();
    }
    catch (Exception e)
    {
        System.out.println("File did not open because of "+e);
    }
}   static void readFile()
{
    int size=0;
    Athlete athlete = new Athlete();
    while (console.hasNext())
    {
        String a,b,d; int c; float e; //Read the data in the file and store them in temporary variables.
        a=console.next(); //First Name
        b=console.next(); //Last Name
        c=console.nextInt(); //ID-Number
        d=console.next(); //Citizenship
        e=console.nextFloat(); //Time
        //Step 1.3: Store File Data
        athlete.setVariables(a, b, c, d, e, size);
        size++;
    }

    athlete.Athlete(size);
}
}

Marathon txt file Error

我无法在此帖中嵌入图片的原因 Not allowing me to upload any image on this post.

1 个答案:

答案 0 :(得分:0)

您的Athlete构造函数需要一个size参数。但是,你第一次创建一个运动员不使用任何参数,所以这默认为Java的“默认构造函数”,除了基本上调用super之外什么都不做。

因此,您需要使用实际分配您即将填充的数组的构造函数。问题是,编写代码的方式,在您读完整个文件并尝试修改Athlete之前,您不知道大小。

你可以采取很多方法,我可以为这个文件提出一些样式和语义修复,但我建议从单个传递文件开始获取大小,然后使用它来调用构造函数大小作为其参数。然后你可以在第二遍中安全地改变那些数组。这应该可以帮到你。