2016-12-07 1 views
-4

Je suis vraiment novice en programmation et j'essaie de mettre en place un inventaire des étudiants et de valider les entrées en vérifiant chaque champ.Exception de pointeur nul en Java

Il contient une participation de 10 jours et je dois valider chaque champ que ce soit Oui/Non. Et je les assigne aux champs de classe en utilisant des méthodes getter/setter. Comme Attendance est une série de 10 entrées, je les assigne sous la forme d'une liste et je les passe en tant que paramètre à la méthode set et je les assigne au tableau Class.

Bien que la liste ne soit pas vide, l'assigner à un tableau jette 'Exception de pointeur nul' et ne parvient pas à comprendre pourquoi.

import java.util.*; 

public class Studentdetail {

String studentName; 
String studentId; 
String classCode; 
String[] attendence;//={"no"," yes", "yes"," no", "yes"," yes", "yes", "yes"," no"," yes"}; 

String test1; 
String test2; 
String tutorial; 
String exams; 

public String getStudentName() { 
    return studentName; 
} 

public void setStudentName(String studentName) { 
    this.studentName = studentName; 
} 

public String getStudentId() { 
    return studentId; 
} 

public void setStudentId(String studentId) { 
    this.studentId = studentId; 
} 

public String getClassCode() { 
    return classCode; 
} 

public void setClassCode(String classCode) { 
    this.classCode = classCode; 
} 

public String[] getAttendence() { 

    return attendence; 
} 

private void setAttendence(List<String> studentList) { 

     int j=1; 


     for(String attList: studentList){ 

      if(attList != null){ 
       attendence[j]= attList; 
      } 
      j++; 

    } 
} 

public String getTest1() { 
    return test1; 
} 

public void setTest1(String test1) { 
    this.test1 = test1; 
} 

public String getTest2() { 
    return test2; 
} 

public void setTest2(String test2) { 
    this.test2 = test2; 
} 

public String getTutorial() { 
    return tutorial; 
} 

public void setTutorial(String tutorial) { 
    this.tutorial = tutorial; 
} 

public String getExams() { 
    return exams; 
} 

public void setExams(String exams) { 
    this.exams = exams; 
} 



public static void main(String[] args) { 

    String sampleInput = "S0032124, Tan ah cat, ICT310-FT02, no, yes, yes, no, yes, yes, yes, yes, no, yes, 43, 55, 12, 53"; 

    ArrayList<String> studentList = new ArrayList<String>(); 

    for (String s : sampleInput.split(",")) { 
     studentList.add(s); 
    } 
    Studentdetail newStudent = new Studentdetail(); 

    newStudent.setStudentId(studentList.get(0)); 

    newStudent.setStudentName(studentList.get(1)); 

    newStudent.setClassCode(studentList.get(2)); 

    newStudent.setAttendence(studentList.subList(3, 12)); 

    newStudent.setTest1(studentList.get(13)); 

    newStudent.setTest2(studentList.get(14)); 

    newStudent.setTutorial(studentList.get(15)); 

    newStudent.setExams(studentList.get(16)); 

    boolean value; 


    value = classCodeValidator(newStudent.getClassCode()); 

    value = stuAttValidator(newStudent.getAttendence()); 

    if (value == true) 
     System.out.println("Class code verified " 
       + newStudent.getClassCode()); 
    else 
     System.out.println("Class code invalid " 
       + newStudent.getClassCode().trim().substring(6,7)); 

} 


public boolean stuIdValidator(String stuId) { 
    if (stuId.length() == 8) { 
     if (stuId.substring(0, 1) == "S") 
      return true; 
    } 

    return false; 
} 

public static boolean classCodeValidator(String classCode) { 
    // ICT303-FT07 

    if (classCode.trim().length() == 11) 
     if (classCode.trim().substring(6,7).equals("-")) 
      if (classCode.trim().substring(1,7).length() == 6) 
       if (classCode.trim().substring(7, 11).length() == 4) 
        return true; 
    return false; 

} 

public static boolean stuAttValidator (String[] stuAtten){ 

    for(String attMarker: stuAtten){ 

     if(attMarker.equalsIgnoreCase("YES") || attMarker.equalsIgnoreCase("NO")) 
      return true; 

    } 

    return false; 
} 

}

+5

'l'attention 'n'est pas initialisée. Utilisez un débogueur pour résoudre ce genre de bug – jhamon

+0

Généralement, lorsque vous demandez SO sur une exception que vous ne pouvez pas comprendre, c'est une bonne idée d'ajouter la stacktrace (cette sortie comme "Exception bla bla at xyz ... at abc .. . at def ... ") – Fildor

+0

@jhamon - ont ajouté le code entier ici. Espérons que cela aide – fjosep

Répondre

1

Vous devez d'abord initialiser votre tableau de chaînes attendence.

string[] attendence; 

private void setAttendence(List<String> studentList) { 

     int j=1; 

     for(String attList: studentList){ 

      if(attList != null){ 
       attendence[j]= attList; // getting null pointer exception 
      } 
      j++; 
    } 
} 
    public static void main(String[] args) { 

    String sampleInput = "S0032124, Tan ah cat, ICT310-FT02, no, yes, yes, no, yes, yes, yes, yes, no, yes, 43, 55, 12, 53"; 

    ArrayList<String> studentList = new ArrayList<String>(); 

    for (String s : sampleInput.split(",")) { 
     studentList.add(s); 
    } 
attendence = new string[36]; 
newStudent.setAttendence(studentList.subList(3, 12)); 
} 

Sinon, vous ne pouvez pas atteindre une valeur de la présence parce que c'est juste un pointeur indique null. Si vous êtes familier avec les langages de programmation de niveau inférieur, les tableaux sont des pointeurs et ils doivent montrer le début de l'espace mémoire alloué. En disant new string [n], vous allouez n * sizeof (string) octets en espace mémoire. Donc, si vous dites assiduité [1] vous atteindrez l'emplacement de & attendence + sizeof (string). Par la manière dont string est un tableau char, vous obtenez réellement un pointeur de pointeur. Je veux dire sizeof (string) = 1 mot ..

+0

Toute suggestion comment l'obtenir initialisé dans le code ci-dessus? Parce que quand j'ai essayé d'initialiser des valeurs pendant la déclaration, j'obtiens l'exception ArrayOutOfBound. – fjosep

+0

Problème résolu. Ajout de l'initialisation pour le tableau de chaînes et maintenant il n'y a pas d'erreur. setAttendence private void (Liste studentList) { \t \t \t \t attendence = new String [] { "non", "oui", "oui", "non", "oui", "oui", « oui "," oui "," non "," oui "}; \t \t \t \t \t int j = 1; \t \t \t \t \t \t \t \t \t pour (String AttList: studentList) { \t \t \t \t \t \t \t if ((AttList = null) && (attendence!= null)) { \t \t \t \t \t attendence [j] = attList; \t \t \t \t} \t \t \t \t j ++; \t \t \t \t \t \t} – fjosep