Bonjour à tous,
Je vais essayer d'être clair, concis, complet.
J'ai 3 classes : Batiment / Module / Main
Un bâtiment contient des modules.
Préambule :
- J'ai crée un batiment (bat0)
- pour créer un module, je dois appeler la méthode "CreerEtAjouterNouveauModule(String nom)" car l'id du module dépendra du nombre de module déjà crée dans le batiment (et il le passe en paramètre)
- une fois le module crée, la méthode appelle "this.addModule(nouveauModule)"
Voici mon problème :
- lorsque cette dernière méthode tente :
this.listeDesModulesDuBatiment.add(moduleAAjouter);
cela indique cette erreur :
Il s'agit bien, à priori, de cette ligne qui est en erreur car j'ai isolé le reste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Exception in thread "main" java.lang.NullPointerException at aaaProjetJAVA.Batiment.addModule(Batiment.java:123) at aaaProjetJAVA.Batiment.CreerEtAjouterNouveauModule(Batiment.java:140) at aaaProjetJAVA.Main.main(Main.java:41)
Je ne vois pas d'où cela peut venir...
Merci à ceux qui auront le courage de jeter un oeil...
Classe en raccourci (les classes complètes à la fin)
Batiment:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 private List<Module> listeDesModulesDuBatiment; private int nombreDeModules; private void addModule(Module moduleAAjouter) { if (moduleAAjouter != null) { this.listeDesModulesDuBatiment.add(moduleAAjouter); } } public void CreerEtAjouterNouveauModule(String nom){ int nbMod = this.getNombreDeModules(); Module nouveauModule = new Module(nbMod,nom); this.addModule(nouveauModule); System.out.println("Nouveau module id : " + nouveauModule.getIdModule() + " crée"); }
Module :
Main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public class Module { private String nomModule; private int idModule; // Constructeur public Module(int id, String nom){ nomModule = nom; idModule = id; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // création d'un batiment Batiment bat0 = new Batiment("Batiment0"); // création d'un module System.out.println("\n\n\nCréation d'un module pour le bâtiment : bat0"); bat0.CreerEtAjouterNouveauModule("Module0duBat0");
Classes complètes :
Batiment :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147 package aaaProjetJAVA; import java.util.*; public class Batiment { private static int nombreDeBatiment = 0; private static List<Batiment> listeDesBatiments = new ArrayList<>(); private int idBatiment; private String nomBatiment; private List<Module> listeDesModulesDuBatiment; private int nombreDeModules; // Constructeur public Batiment(String nom) { idBatiment = Batiment.getNombreDeBatiment(); nomBatiment = nom; nombreDeModules = 0; List<Module> listeDesModulesDuBatiment = new ArrayList<>(); // mise à jour des statiques dans le constructeur : Batiment.setNombreDeBatiment(1); Batiment.addBatiments(this); } // *********** méthode statique *********** // get nombre de batiment public static int getNombreDeBatiment() { return nombreDeBatiment; } private static void setNombreDeBatiment(int nombreDeBatimentAAjouter) { Batiment.nombreDeBatiment += nombreDeBatimentAAjouter; } // get Liste des Batiments public static List<Batiment> getListeDesBatiments() { return listeDesBatiments; } private static void addBatiments(Batiment batimentAAjouter) { Batiment.listeDesBatiments.add(batimentAAjouter); } // destructeur de bâtiment public static void detruireBatiment(Batiment batimentADetruire) { if (listeDesBatiments.contains(batimentADetruire)) { listeDesBatiments.remove(batimentADetruire); Batiment.setNombreDeBatiment(-1); } } // *********** méthode non statique *********** // To String @Override public String toString() { String texte = "\n"; if (listeDesBatiments == null) { texte += "Il n'y a aucun bâtiment construit"; return texte; } else { texte += "Le bâtiment n°" + this.idBatiment + " se nomme " + this.nomBatiment; texte += "\nIl possède " + this.nombreDeModules + " modules"; texte += "\nSes modules sont :"; if (this.nombreDeModules == 0) { texte += "\nIl n'y a aucun module\n\n"; return texte; } else { for (int i = 0; i < nombreDeModules; i++) { System.out.println("\n"); listeDesModulesDuBatiment.get(i).toString(); } System.out.println("\nFin des modules\n\n"); return texte; } } } // Getters and Setters // Get ID (SET id à la construction) public int getIdBatiment() { return idBatiment; } // Get et Set NOM public String getNomBatiment() { return nomBatiment; } public void setNomBatiment(String nomBatiment) { this.nomBatiment = nomBatiment; } // nombreDeModule private int getNombreDeModules() { return nombreDeModules; } private void setNombreDeModules(int nombreDeModules) { this.nombreDeModules += nombreDeModules; } // Liste des Modules public List<Module> getListeDesModules() { return listeDesModulesDuBatiment; } private void addModule(Module moduleAAjouter) { if (moduleAAjouter != null) { this.listeDesModulesDuBatiment.add(moduleAAjouter); //this.setNombreDeModules(1); } } public void retirerModule(Module moduleARetirer) { if (listeDesModulesDuBatiment.contains(moduleARetirer)) { listeDesModulesDuBatiment.remove(moduleARetirer); nombreDeModules--; } } public void CreerEtAjouterNouveauModule(String nom){ int nbMod = this.getNombreDeModules(); Module nouveauModule = new Module(nbMod,nom); this.addModule(nouveauModule); System.out.println("Nouveau module id : " + nouveauModule.getIdModule() + " crée"); } }
Module :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 package aaaProjetJAVA; import java.util.ArrayList; import java.util.List; public class Module { private String nomModule; private int idModule; List<Integer> listeDesIdDesModulesAtteignable; private int nombreDeModuleAtteignable; List<Deplacement> listeDesDeplacements; // Constructeur public Module(int id, String nom){ nomModule = nom; idModule = id; listeDesIdDesModulesAtteignable = new ArrayList<>(); nombreDeModuleAtteignable = 0; listeDesDeplacements = new ArrayList<>(); } // Getters et Setters public String getNomModule() { return nomModule; } public void setNomModule(String nomModule) { this.nomModule = nomModule; } public List<Integer> getListeDesIdDesModulesAtteignable() { return listeDesIdDesModulesAtteignable; } public int getNombreDeModuleAtteignable() { return nombreDeModuleAtteignable; } public List<Deplacement> getListeDesDeplacement() { return listeDesDeplacements; } /* AJOUTER UN DEPLACEMENT POSSIBLE public void addListeDesDeplacement(List<Deplacement> listeDesDeplacement) { this.listeDesDeplacement = listeDesDeplacement; } */ /* AJOUTER UN MODULE ATTEIGNABLE public void setListeDesIdDesModulesAtteignable(List<Integer> listeDesIdDesModulesAtteignable) { this.listeDesIdDesModulesAtteignable = listeDesIdDesModulesAtteignable; } */ public int getIdModule() { return idModule; } @Override public String toString (){ String texte = "\n"; texte += "Le module n°" + this.getIdModule() + " se nomme " + this.getNomModule(); texte += "\nIl y a " + this.getNombreDeModuleAtteignable() + " modules atteignables à partir de cette position"; texte += "\nLes modules atteignables sont :"; if (this.getNombreDeModuleAtteignable() == 0) { texte += "\nIl n'y a aucun module atteignable\n\n"; return texte; } else { for (int i = 0; i < this.getNombreDeModuleAtteignable(); i++) { System.out.println("\n"); this.getListeDesIdDesModulesAtteignable().get(i).toString(); } System.out.println("\nFin des modules Atteignables\n\n"); return texte; } } }
Main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 package aaaProjetJAVA; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("\nNombre de batiment construit : " + Batiment.getNombreDeBatiment()); System.out.println("Liste des batiments construit : "); if (Batiment.getListeDesBatiments().isEmpty()) { System.out.println("Il n'y a aucun bâtiment construit"); } else { System.out.println(Batiment.getListeDesBatiments().toString()); } System.out.println("\n\nConstruction de deux bâtiments ....\n\n"); Batiment bat0 = new Batiment("Batiment0"); Batiment bat1 = new Batiment("Batiment1"); System.out.println("\nNombre de batiment construit : " + Batiment.getNombreDeBatiment()); System.out.println("Liste des batiments construit : "); if (Batiment.getListeDesBatiments().isEmpty()) { System.out.println("Il n'y a aucun bâtiment construit"); } else { for (int i = 0; i < Batiment.getNombreDeBatiment(); i++) { System.out.println(Batiment.getListeDesBatiments().get(i).toString()); } } // création d'un module System.out.println("\n\n\nCréation d'un module pour le bâtiment : bat0"); bat0.CreerEtAjouterNouveauModule("Module0duBat0"); //System.out.println(bat0.getListeDesModules()); } // accolade de fin du main }
Partager