2016-07-20 5 views
1

Das sind meine Fehler:ich kann nicht herausfinden, wie eine bestimmte Anordnung machen von Strings, Integer oder Variablen

Exception in thread "main" java.lang.NullPointerException 
at Student.<init>(Student.java:22) 
at Roster.<init>(Roster.java:35) 
at Roster.main(Roster.java:15)) 

Ich verstehe, dass das Problem ist, weil ich eine Reihe von drei Typen haben (die letzten 3 in der Zeichenfolge von Schülernamen), die nicht korrekt gespeichert werden.

import java.util.*; 
import java.lang.*; 
public class Roster 
{ 
    static String[] students = {"1,John,Smith,[email protected],20,88,79,59", 
           "2,Suzan,Erickson,[email protected],19,91,72,85", 
           "3,Jack,Napoli,The_lawyer99yahoo.com,19,85,84,87", 
           "4,Erin,Black,[email protected],22,91,98,82", 
           "5,Michael,Brauer,[email protected],30,99,98,96"}; 

    static ArrayList<Student> myStudents = new ArrayList<Student>(); 

    public static void main(String[] args) 
    { 
     new Roster(); 
    } 

    public Roster() 
    { 
     for (int i = 0; i < students.length; i++) 
     { 
      String y = students[i]; 
      String[] variable = y.split(","); 

      String id = variable[0]; 
      String first = variable[1]; 
      String last = variable[2]; 
      String email = variable[3];    
      int age = Integer.parseInt(variable[4]); 
      int grade1 = Integer.parseInt(variable[5]); 
      int grade2 = Integer.parseInt(variable[6]); 
      int grade3 = Integer.parseInt(variable[7]); 
      int[] grades = new int[]{grade1, grade2, grade3}; 

      //Here is the first issue that I am having: Nothing stores to grades. 

      Student x = new Student(id, first, last, email, age, grades); 

      myStudents.add(x); 
     } 

     print_all(); 

     print_invalid_emails(); 
     for (Student y : myStudents) 
     { 
      print_average_grade(y.getId()); 
     } 
    } 

    public static void print_all() 
    { 
     for (Student x : myStudents) 
     { 
      System.out.println(x); 
     } 
    } 

    public static void print_invalid_emails() 
    { 
     for (Student x : myStudents) 
     { 
      String email = x.getEmail(); 
      if (!email.contains("@")) 
      { 
       System.out.println("INVALID EMAIL: " + email); 
      } 
      else if (!email.contains(".")) 
      { 
       System.out.println("INVALID EMAIL: " + email); 
      } 
      else if((email.contains(" "))) 
      { 
       System.out.println("INVALID EMAIL: " + email); 
      } 
     } 

     remove("3"); 
     remove("3"); 
    } 

    public static void remove(String id) 
    { 
     for (int i = 0; i < myStudents.size(); i++) 
     { 
      if (myStudents.get(i).getId().equals(id)) 
      { 
       myStudents.remove(i); 
       System.out.println("STUDENT ID: (" + id + ") *NOT FOUND*"); 
       return; 
      } 
     } 
     System.out.println("STUDENT ID: (" + id + ") !DELETED!"); 
    } 

    public static void print_average_grade(String id) 
    { 
     for (Student y : myStudents) 
     { 
      if(y.getId().equals(id)) 
      { 
       double total = 100; 
       double average = total/3; 
       System.out.println("STUDENT ID: (" + id + ") " + average); 
      } 
     } 
    } 
} 

public class Student 
{ 
    String id; 
    String first; 
    String last; 
    String email; 
    int age; 
    int[] grades; 

    public Student(String id, String first, String last, String email, int age, int[] grades) 
    { 
     this.id = id; 
     this.first = first; 
     this.last = last; 
     this.email = email; 
     this.age = age; 
     this.grades = grades; 
    } 

    //This is the other problem. I am trying to make an array 

    public int[] gradeArray = {grades[1], grades[2], grades[3]}; 

    public String getFirst() 
    { 
     return first; 
    } 
    public void setFirst(String first) 
    { 
     this.first = first; 
    } 
    public String getLast() 
    { 
     return last; 
    } 
    public void setLast(String last) 
    { 
     this.last = last; 
    } 
    public String getEmail() 
    { 
     return email; 
    } 
    public void setEmail(String email) 
    { 
     this.email = email; 
    } 
    public int getAge() 
    { 
     return age; 
    } 
    public void setAge(int age) 
    { 
     this.age=age; 
    } 
    public String getId() 
    { 
     return id; 
    } 
    public void setId(String id) 
    { 
     this.id = id; 
    } 
    public int[] getGradeArray() 
    { 
     return gradeArray; 
    } 
    public void myGrades(int[] grades) 
    { 
     this.grades = grades; 
    } 
    //Print to output 
    public String toString() 
    { 
     return "STUDENT: ID-" + id + " AGE-" + age + " NAME-" + last + ", " + first; 
    } 
} 

Antwort

0

Hier Sie speichert drei Typen in einen (0-basiert) int-Array:

int[] grades = new int[]{grade1, grade2, grade3}; 

Aber dann sind Sie für den Zugriff Noten versuchen, [3], die jenseits der Grenzen der Array.

public int[] gradeArray = {grades[1], grades[2], grades[3]}; 

Auch erwähnenswert: Erickson_1990 @ gmailcom wird Ihren gültigen E-Mail-Test nicht bestehen. Ich bin mir nicht sicher, ob das zu Testzwecken beabsichtigt war oder nur ein Tippfehler.

Verwandte Themen