【问题标题】:Exception error with class and files [duplicate]类和文件的异常错误[重复]
【发布时间】:2017-04-17 16:45:50
【问题描述】:

我的计算机上有一个名为 records.txt 的文件,上面有几行。每行的格式为“名字 - 姓氏 - 地址 - 年龄 - gpa”

亚当 - 迈克尔 - 佛罗里达州盖恩斯维尔 - 16 - 75

爱丽丝 - 巴里 - 佛罗里达州杰克逊维尔 - 17 - 40

凯文 - 亚当 - 佛罗里达州奥兰多 - 20 - 65

雅各布 - 迈克尔 - 佛罗里达州迈阿密 - 16 - 88

萨布丽娜 - 马修 - 佛罗里达州盖恩斯维尔 - 18 - 90

我的程序应该将它们分开并使用一类学生显示信息。 cgpa 是我的 gpa 代码中显示的界限给出的字母等级。这是我的代码给我的错误。

     Exception in thread "main" java.lang.NullPointerException
at hw6_hamilton_daniel.HW6_Hamilton_Daniel.main(HW6_Hamilton_Daniel.java:41)
C:\Users\dhami\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

这是我的代码:

主要:

package hw6_hamilton_daniel;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
/**
*
* @author dhami
*/
public class HW6_Hamilton_Daniel {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    try {

        File records = new File("C:\\Users\\dhami\\Desktop\\records.txt");
        Scanner input = new Scanner(records);

        int count = 0;
        while (input.hasNextLine()) {
            count = count + 1;
            break;
        }
        input.close();

        student[] students = new student[count];
        Scanner input2 = new Scanner(records);

        for (int i = 0; i < count; i++) {

            String line = input2.nextLine();
            String[] Split = line.split(" - ");

            students[i].set_firstname(Split[0]);
            students[i].set_lastname(Split[1]);
            students[i].set_address(Split[2]);
            students[i].set_age(Split[3]);
            students[i].set_gpa(Split[4]);

            students[i].Display_info();
            break;
        }
        input2.close();
    } catch (FileNotFoundException ex) {
        System.out.println("File Not Found");
    }//IF FILE IS NOT ON MACHINE

}

}

类:

public class student {

private String firstname;
private String lastname;
private String address;
private int age;
private int gpa;
private char cgpa;

student() {
    firstname = "Default_FName";
    lastname = "Default_LName";
    address = "Default_Address";
    age = 0;
    gpa = 0;
    cgpa = 'X';
}//Default constructor

void set_firstname (String new_name) {
    firstname = new_name;
}
String get_firstname () {
    return firstname;
}//firstname-------------

void set_lastname (String new_lastname) {
    lastname = new_lastname;
}
String get_lastname () {
    return lastname;
}//lastname--------------

void set_address (String new_address) {
    address = new_address;
}
String get_address () {
    return address;
}//address---------------

void set_age (String new_age) {
    age = Integer.parseInt(new_age);
}
int get_age () {
    return age;
}//age-------------------

void set_gpa (String new_gpa) {
    gpa = Integer.parseInt(new_gpa);

    if (gpa >= 85 && gpa <= 100) {
        cgpa = 'A';
    }
    if (gpa >=60 && gpa <= 85) {
        cgpa = 'B';
    }
    else {
        cgpa = 'C';
    }
}
int get_gpa () {
    return gpa;
}//gpa-------------------
char get_cgpa () {
    return cgpa;
}

void Display_info() {
    System.out.println("First Name: "+firstname);
    System.out.println("Last Name: "+lastname);
    System.out.println("Address: "+address);
    System.out.println("Age: "+age);
    System.out.println("GPA: "+gpa+" ("+cgpa+")\r\n");
}
    }

【问题讨论】:

  • 请谷歌 NullPointerExceptions,因为这是一个常见问题,并且在本网站上经常被问到和回答。
  • 您创建了学生数组,但在尝试使用它之前从未用对象填充它。再次,首先搜索这个,因为它被问了很多次。解决方案:在尝试使用之前先用新学生填充您的数组。您可以在 for 循环的开头执行此操作。

标签: java arrays class loops exception


【解决方案1】:

我创建了你的类的一个实例来避免静态上下文。

基本上学生[i]没有价值,我已经将它初始化为一个新的学生对象

public class HW6_Hamilton_Daniel {

public static void main(String[] args) {
    new HW6_Hamilton_Daniel().run();
}

public void run() {
Student[] students = new Student[5];
    int i = 0;
            String line = "Adam - Michael - Gainesville florida - 16 - 75";
            String[] Split = line.split(" - ");

    students[i] = new Student();
            students[i].set_firstname(Split[0]);
            students[i].set_lastname(Split[1]);
            students[i].set_address(Split[2]);
            students[i].set_age(Split[3]);
            students[i].set_gpa(Split[4]);
            students[i].Display_info();
}

class Student {

private String firstname;
private String lastname;
private String address;
private int age;
private int gpa;
private char cgpa;

Student() {
    firstname = "Default_FName";
    lastname = "Default_LName";
    address = "Default_Address";
    age = 0;
    gpa = 0;
    cgpa = 'X';
}//Default constructor

void set_firstname (String new_name) {
    firstname = new_name;
}
String get_firstname () {
    return firstname;
}//firstname-------------

void set_lastname (String new_lastname) {
    lastname = new_lastname;
}
String get_lastname () {
    return lastname;
}//lastname--------------

void set_address (String new_address) {
    address = new_address;
}
String get_address () {
    return address;
}//address---------------

void set_age (String new_age) {
    age = Integer.parseInt(new_age);
}
int get_age () {
    return age;
}//age-------------------

void set_gpa (String new_gpa) {
    gpa = Integer.parseInt(new_gpa);

    if (gpa >= 85 && gpa <= 100) {
        cgpa = 'A';
    }
    if (gpa >=60 && gpa <= 85) {
        cgpa = 'B';
    }
    else {
        cgpa = 'C';
    }
}
int get_gpa () {
    return gpa;
}//gpa-------------------
char get_cgpa () {
    return cgpa;
}

void Display_info() {
    System.out.println("First Name: "+firstname);
    System.out.println("Last Name: "+lastname);
    System.out.println("Address: "+address);
    System.out.println("Age: "+age);
    System.out.println("GPA: "+gpa+" ("+cgpa+")\r\n");
}
    }

}

【讨论】:

  • 我尝试将我的 main 更改为你所拥有的,但我没有收到任何输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多