Pourquoi Personne hérite d'Objet qui modélise la carte ?
Fais moi une proposition.
Version imprimable
Bé j'aurais dit les différents types d'éléments(hopital, médecin, non médecin sain, non médecin malade, non médecin difficile) mais ça me parait bizarre de le faire ici et pas dans les classes.
En attendant voici ce que j'ai fait pour le main, on me demande d'initialiser le nombre d'éléments.
Il manque les accesseurs pour pouvoir accéder aux nombres dans les autres classes bien sur !
Code:
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 public class Main { private int nombre_hopitaux; private int nombre_medecins; private int nombre_non_medecins_sains; private int nombre_non_medecins_malades; private int nombre_non_medecins_cas_difficiles; public static void main (String args[]) { Scanner sc= new Scanner(System.in); System.out.println("Veuillez saisir le nombre initial d'hôpitaux"); nombre_hopitaux=sc.nextInt(); System.out.println("Veuillez saisir le nombre initial de médecins"); nombre_medecins=sc.nextInt(); System.out.println("Veuillez saisir le nombre initial de non_médecins_sains"); nombre_non_medecins_sains=sc.nextInt(); System.out.println("Veuillez saisir le nombre initial de non_médecins_malades"); nombre_medecins_malades=sc.nextInt(); System.out.println("Veuillez saisir le nombre initial de non_médecins_difficiles"); nombre_medecins_cas_difficiles=sc.nextInt(); } }
Concernant la classe Main, le principe est de faire une classe stupide : une classe avec une seule méthode (main) et rien hors de la méthode. Elle sert juste à démarrer ton appli après c'est aux objets de dialoguer entre eux.
Oui d'accord mais c'est bien ici qu'on va lancer toutes les fonctions, remplir mon tableau ...
Voici ma classe Carte. POuvez vous me dire ce que vous en pensez? Merci.
Comme vous m'avez montré, je suis donc parti sur la base: Classe Carte, Classe Element et Classe Personne(hopital,medecin,non medecin) héritant de la Classe Element. Donc je suppose que pour créer une personne on utilisera le constructeur de la classe Elément.Cependant comment peut-on faire ça alors que selon les différentes personnes les parametres à intégrer dans le constructeur sont différents ?Code:
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 public class Carte { private Element[][] elements; private int largeur; private int hauteur; public int i=0; public Carte() { Random generator = new Random(); while(i<getNombre_hopitaux()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe hopital ? } i++; } i=0; while(i<getNombre_medecins()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe medecin? } i++; } i=0; while(i<getNombre_non_medecins_sains()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe non medecin "option" sains ? } i++; } i=0; while(i<getNombre_non_medecins_malades()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe non medecin "option" malades ? } i++; } i=0; while(i<getNombre_non_medecins_cas_difficiles()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe non medecin "option" cas difficiles ? } i++; } public int getWidth() { return largeur; } public int getHeight() { return hauteur; } }
S'il s'agit des dimensions de la carte, je ne comprends pas leurs utilisations dans les boucles d'initialisation, par exemple :Code:
1
2 private int largeur; private int hauteur;
Code:
1
2
3
4
5
6
7
8
9
10 while(i < getNombre_hopitaux()) { largeur = generator.nextInt(20)+1; hauteur = generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=... } i++; }
Pourquoi +1 ?Code:generator.nextInt(20)+1;
Ça sert à quoi ?Code:public int i = 0;
getNombre_hopitaux(), getNombre_medecins(), ...
Ça sort d'où ?
Ce que je t'ai proposé n'est qu'un squelette qui doit être complété, ici peut-être qu'il faudrait ajouter des paramètres au constructeur...
Oui et non, on utilise le constructeur de la classe Elément de façon indirecte, si on souhaite créer une personne on utilise le constructeur de la classe personne et c'est lui qui se charge d'appeler le constructeur de la classe Element.Citation:
Donc je suppose que pour créer une personne on utilisera le constructeur de la classe Elément.
Code:
1
2
3
4 public Person(Carte owner, int x, int y, boolean isSick) { //constructeur de la classe personne super(owner, x, y); // appelle au constructeur de la classe Element this.isSick = isSick; // information qui ne concerne que les personnes }
Bonjour, les getNOmbre_hopitaux ... sortent du main ou pour initilaiser je demande le nombre de médecins, d'hopitaux...
Pour le +1 du generator, on m'avait dit de le mettre sinon on arriverait pas jusqu'à 20, peut être sue c'est une erreur.
Quand à cette commande je ne la connais pas, peux_tu m'en dire plus sur ça ?
this.isSick = isSick;
B dans les boucles d'initialisation de la carte, je choisis(tant que j'ai pas mon nombre d'éléments(par ex hopital) demandé dans le main) un nombre entre 0 et 20. Et je place l'objet à cette place(en faisant appel au constructeur de la classe Person) d'après ce que tu m'as dit. Cependant comme mes objets ont des caracs différentes, il faudrait que je rajoute des instructions au constructeur de la classe Personne( des caracs propres aux différents éléments)
Est bien qu'ils y retournent, ils ne sont pas les bienvenus dans le constructeur.Citation:
les getNOmbre_hopitaux ... sortent du main
Attention "generator.nextInt(20)+1;" ne donne pas un nombre entre 0 et 20.Citation:
Pour le +1 du generator, ... un nombre entre 0 et 20
Ce n'est qu'une affectation (voir this), c'est pour te montrer l'emboitement des constructeurs et comment gérer une une info spécifique d'un constructeur donné.Citation:
Quand à cette commande je ne la connais pas, peux_tu m'en dire plus sur ça ? this.isSick = isSick;
Peut-être que pour simplifier, tu devrais te concentrer sur un seul type d'éléments (par exemple les hôpitaux), car les médecins, personne, ... c'est quasiment la même chose.Citation:
B dans les boucles d'initialisation de la carte, je choisis(tant que j'ai pas mon nombre d'éléments(par ex hopital) demandé dans le main) un nombre entre 0 et 20. Et je place l'objet à cette place(en faisant appel au constructeur de la classe Person) d'après ce que tu m'as dit. Cependant comme mes objets ont des caracs différentes, il faudrait que je rajoute des instructions au constructeur de la classe Personne( des caracs propres aux différents éléments)
Mais je suis bien obligé d'avoir le nombre d'éléments pour initialiser ma carte puisque je dois placer l'élément aléatoirement sur ma carte, mais je dois le faire autant de fois que j'ai d'hopitaux par exemple.Je dois faire ça dans le main plutôt ? Une fois compris ça, ce sera bien, je commence à y voir clair !
Non?
Et pour le generator.
Je fais Random generator=new Random();
et value = generator.nextInt(20) + 1 , ce n'est pas comme ça qu'on procède ?
Le paramètre nombre d'hôpitaux est indispensable, ce n'est pas ce que je discute, c'est la façon dont-il arrive dans le constructeur (où il doit arriver au final quoi qu'il en soit).Citation:
Mais je suis bien obligé d'avoir le nombre d'éléments pour initialiser ma carte puisque je dois placer l'élément aléatoirement sur ma carte, mais je dois le faire autant de fois que j'ai d'hopitaux par exemple.Je dois faire ça dans le main plutôt ?
Ton code est parfait mais il ne répond pas à tes specs qui disent "un nombre entre 0 et 20". Te focalise pas la dessus, avance sur le reste quand ça commencera à tourner tu verras qu'il y a un truc qui cloche et il sera tant de corriger ce qui n'est qu'une petite erreur.Citation:
value = generator.nextInt(20) + 1 , ce n'est pas comme ça qu'on procède ?
Je vais vous mettre le code que j'ai pour le moment, j'ai mis des commentaires explicatifs :
classe Carte :
classe Element :Code:
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 public class Carte { private Element[][] elements; private int largeur; private int hauteur; public int i=0; public Carte() { Random generator = new Random(); while(i<getNombre_hopitaux()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe hopital ? } i++; } i=0; while(i<getNombre_medecins()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe medecin? } i++; } i=0; while(i<getNombre_non_medecins_sains()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe non medecin "option" sains ? } i++; } i=0; while(i<getNombre_non_medecins_malades()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe non medecin "option" malades ? } i++; } i=0; while(i<getNombre_non_medecins_cas_difficiles()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe non medecin "option" cas difficiles ? } i++; } public int getWidth() { return largeur; } public int getHeight() { return hauteur; } }
classe Hopital:Code:
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 public abstract class Element { private Carte owner; private int x,y; private char representation; // la lettre qui va représenter les objets dans la matrice public Element(Carte owner, int x, int y,char representation) { if(x<0 || x>=owner.getWidth()) throw new IllegalArgumentException("x:"+x); if(y<0 || y>=owner.getHeight()) throw new IllegalArgumentException("y:"+y); } /*Ici je dois définir les méthodes qui sont communes à tous les éléments ==> * seul mourrir() est commune à toutes les sous_classes!!! Puis je définis en abstract toutes les autres méthodes ? à savoir Déplacer(l'hopital ne se déplace pas),Soigner,Contaminer, * Approvisionnement_stock_medecin(par l'hopital).*/ public int getX() { return x; } public int getY() { return y; } public char getRepresentation() { return representation; }
classe Medecin :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class Hopital extends Element { public Hopital (Carte owner,int x, int y,char representation) { super.Element(owner,x,y) } public void setPosition(int x, int y) { this.x=x; this.y=y; } public void setRepresentation(char representation) { this.representation=representation; } }
classe Non_medecin:Code:
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 public class Medecin extends Element { private int stock_medecin; public Medecin (Carte owner,int x, int y,char representation,int stock_medecin) { super.Element(owner,x,y) this.stock_medecin=stock_medecin; } public void setPosition(int x, int y) { this.x=x; this.y=y; } public void setRepresentation(char representation) { this.representation=representation; } public int getStock() { return stock_medecin; } public void setStock(int stock) { stock_medecin=stock; } // Ici je dois définir les méthodes Soigner() et Deplacer() }
Dites moi ce que vous en pensez, merci !!!!!!Code:
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 public class Non_medecin extends Element { private String etat_maladie; // cas_difficile,malade ou sain private int resistance; // les malades difficiles ont besoin de 3 médicaments, les normaux d'un seul. private int debut_contamination; /* compteur du début de la contamination(4 tours après la contamination si le compteur resistance n'est pas à 0, l'élément meurt)*/ public Non_medecin(Carte owner,int x,int y,char representation,String etat_maladie,int resistance,int debut_contamination) { super.Element(owner,x,y); this.etat_maladie=etat_maladie; this.resistance=resistance; this.debut_contamination=debut_contamination; } public void setPosition(int x,int y) { this.x=x; this.y=y; } public void setRepresentation(char representation) { this.representation=representation; } public void setEtat_maladie(String etat_maladie) { this.etat_maladie=etat_maladie; } public void setResistance(int resistance) { this.resistance=resistance; } public void setDebut_contamination(int debut_contamination) { this.debut_contamination=debut_contamination; } public void getEtat_maladie(String etat_maladie) { return etat_maladie; } public void getResistance(int resistance) { return resistance; } public void getDebut_contamination(int debut_contamination) { return debut_contamination; } }
J'accepte toutes les remarques et c'est bien pour ça que je suis là !!!
Merci à vous !!!
1) Pour la class Element:
- il faut ajouter les methodes suivantes
- Enlever Carte de la classe Element a moins que tu veuilles utiliser plus tard.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public void setPositionX(int x) { this.x=x; } public void setPositionY(int y) { this.y=y; } public void setPosition(int x, int y) { setPositionX(x); setPositionY(y); } public void setRepresentation(char representation) { this.representation=representation; }
2) Enlever les methodes setRepresentation, setPosition des classes Hopital, Medecin et Non_medecinCode:
1
2
3
4
5
6
7
8
9
10 public Element(int width, int height, int x, int y,char representation) { if(x<0 || x>=width) throw new IllegalArgumentException("x:"+x); if(y<0 || y>=height) throw new IllegalArgumentException("y:"+y); this.representation=representation; this.x=x; this.y=y; }
3) Pour la classe Carte, c'est quoi les fonctions getNombre_hopitaux(), getNombre_medecins(), getNombre_non_medecins_sains() ...? Pas dans ton code
4) Comment veux-tu definir ta classe Non_medecine avec des options sains, malades, ...? On ne voit pas dans ton code?
C'est dans le mainCitation:
3) Pour la classe Carte, c'est quoi les fonctions getNombre_hopitaux(), getNombre_medecins(), getNombre_non_medecins_sains() ...? Pas dans ton code
==>
Code:
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 import java.util*; public class Main { private static int nombre_hopitaux; private static int nombre_medecins; private static int nombre_non_medecins_sains; private static int nombre_non_medecins_malades; private static int nombre_non_medecins_cas_difficiles; public int getNombre_hopitaux() { return nombre_hopitaux; } public int getNombre_medecins() { return nombre_medecins; } public int getNombre_non_medecins_sains() { return nombre_non_medecins_sains; } public int getNombre_non_medecins_malades() { return nombre_non_medecins_malades; } public int getNombre_non_medecins_cas_difficiles() { return nombre_non_medecins_cas_difficiles; } public static void main (String args[]) { Scanner sc= new Scanner(System.in); System.out.println("Veuillez saisir le nombre initial d'hôpitaux"); nombre_hopitaux=sc.nextInt(); System.out.println("Veuillez saisir le nombre initial de médecins"); nombre_medecins=sc.nextInt(); System.out.println("Veuillez saisir le nombre initial de non_médecins_sains"); nombre_non_medecins_sains=sc.nextInt(); System.out.println("Veuillez saisir le nombre initial de non_médecins_malades"); nombre_medecins_malades=sc.nextInt(); System.out.println("Veuillez saisir le nombre initial de non_médecins_difficiles"); nombre_medecins_cas_difficiles=sc.nextInt(); /* Peut être qu'ici je dois définir les cas ou je dois sortir du programme : * - lorsque l'on tape sur F * - lorsqu'il n'y a plus de malades * - lorsqu'il ne reste plus que des medecins * A chaque fois que j'appuie sur une touche, un tour doit être effectué aussi(c'est à dire que * les éléments se déplacent sur une des 8 cases possibles du tableau et ils agissent ou non selon * si c'est possible(contaminer,soigner...) * * * * */ } }
Avec le String etat dans le constructeur de Non_medecin.Citation:
Comment veux-tu definir ta classe Non_medecine avec des options sains, malades, ...? On ne voit pas dans ton code?
POurquoi veux-tu définir 2 modifieurs pour la position verticale et horizontale ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 public void setPositionX(int x) { this.x=x; } public void setPositionY(int y) { this.y=y; } public void setPosition(int x, int y) { setPositionX(x); setPositionY(y); }
Voilà sinon j'ai fait les modifs que tu m'as indiqué.
Il me reste à initialiser ma carte aléatoirment avec les différents objets(je ne sais pas si je l'ai bien fait !)
Et à définir les méthodes deplacer, mourrir, soigner, appovisionner_stock et contaminer().
Voici ma classe Carte :
Code:
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 public class Carte { private Element[][] elements; private int largeur; private int hauteur; public int i=0; public Carte(int largeur,int hauteur) { this.largeur=largeur; this.hauteur=hauteur; Random generator = new Random(); while(i<getNombre_hopitaux()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe hopital ? } i++; } i=0; while(i<getNombre_medecins()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe medecin? } i++; } i=0; while(i<getNombre_non_medecins_sains()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe non medecin "option" sains ? } i++; } i=0; while(i<getNombre_non_medecins_malades()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe non medecin "option" malades ? } i++; } i=0; while(i<getNombre_non_medecins_cas_difficiles()) { largeur=generator.nextInt(20)+1; hauteur=generator.nextInt(20)+1; if(elements[largeur][hauteur]=null) { elements[largeur][hauteur]=//appel au constructeur de la classe non medecin "option" cas difficiles ? } i++; } } public int getWidth() { return largeur; } public int getHeight() { return hauteur; } public int setWidth(int largeur) { this.largeur=largeur; } public int setHeigth(int hauteur) { this.hauteur=hauteur; } }
Trop de code !
Avance étape par étape et compile ton code, si tu cherches à tout écrire avant de compiler tu vas pas t'en sortir.
Par exemple, commence pas te concentrer sur les classes Main, Carte, Element et Hopital, et une fois que ça fonctionnera tu avanceras sur le reste.
Pour ma par, je te répondrai que sur le code de ces classes et sur du code qui a été compilé (quitte à t'aider sur les erreurs de compile).
Déjà je suis bloqué dans le Main, je veux saisir des entiers avec la classe Scanner mais ça marche pas. J'ai importé java.util.Scanner, j'ai essayé aussi import java.util.*; mais rien à faire. On dirait que Scanner n'est pas importé puisque le compilateur me dit "Scanner cannot be resolved to a type".
Qu'elle est la version de ton JRE ?
Tu l'obtiens avec : java -version
Je suis sous Windows mais j'utilise Portable Ubuntu. J'ai tapé la commande mais rien ne se passe, on me dit commande introuvable.
A si c'est bon : java version "1.5.0"
Si jpeux meme pas bien compiler je suis bien barré ^^:lol:
Ça sa fonctionne :
Code:
1
2
3
4
5
6
7
8
9
10
11
12 import java.util.Scanner; public class Main2 { public static void main(String[] args) { Scanner scn = new Scanner(System.in); System.out.print("Choix: "); int i = scn.nextInt(); System.out.println("resultat: "+ i); } }
Bé oui ça marche si on arrive à importer Scanner mais moi ça ne marche pas !