Bonjour, je cherche une fonction java pour faire déplacer un objet dans un tableau 2D d'objets en java.Est-ce possible?
Version imprimable
Bonjour, je cherche une fonction java pour faire déplacer un objet dans un tableau 2D d'objets en java.Est-ce possible?
bonsoir,
faut 2 boucles for pour pouvoir parcourir chaque élément
D'accord merci.Autre chose si tu pouvais me renseigner. J'ai envoyé en fichier joint l'intitulé de mon projet.Si tu as le temps de regarder merci.
Ce que je voulais savoir en fait c'est lors de mon projet, je dois créer plusieurs classes(hopital,medecin) etc. Avec ces classes je crée des objets que je dois insérer aléatoirement dans mon tableau 2D pour l'initialiser.
Comment faire cela?
A part faire tableau2D[0][0]=new Medecin(parametres) par exemple, je ne vois pas trop comment faire. Je nvois pas ou faire l'initialisation en fait, dans quelle classe je dois la faire ?
J'ai pas tout compris mais peut-être que ça peut ressembler à ça :
et à chaque appel de createRandomObject(), tu crées un objet au hasard.Code:
1
2
3
4
5
6 for(...) { for(...) { tableau2D[i][j] = createRandomObject(); } }
En fait, le tableau ne doit pas obligatoirement être remplit totalement. Il faut que je dispose un certain nombre d'objets aléatoirement dans le tableau 2D.
Voici le lien ou j'ai joint mon projet. Si tu as le temps.
http://www.developpez.net/forums/d84...ition-classes/
Citation:
Il faut que je dispose un certain nombre d'objets aléatoirment dans le tableau 2D.
Code:
1
2
3
4
5
6
7
8
9
10 n = 0; while(n < à un certain nombre) { n++; x = randomX(); y = randomY(); if(tableau2D[x][y] == null) { tableau2D[x][y] = createRandomObject(); } }
Merci.Mais je vais être plus clair.
Je veux disposer un nombre aléatoire d'objets dans le tableau. Cependant je connais la nature de mes objets. Ce sont soit un hopital, soit un medecin, soit un non medecin. Je connais les objets. Comment faire pour tirer aléatoirement au sort parmi ces 3 objets ?
Si tu as seulement 3 types d'objets dans ton tableau, dans createRandomObject il suffit de generer un nombre compris entre 0,2 et selon la valeur generee tu vas creer l'objet correspondant.
Par exemple
Citation:
Valeur Objet
0 Hopital
1 Medecin
2 Non medecin
Comment générer ce nombre aléatoire de int compris entre 1 et 3 par exemple.Comme ceci ?
private int minimum=1;
private int maximum=3
nombre=Math.round(minimum+Math.random()*(maximum-minimum));
En faisant comme ceci je n'aurais jamais la valeur 2 tiré aléatoirment.
Si c'est bon ce code marche !
Dans la fonction CreateRandomObject je vérifie les valeurs du nombre aléatoire et selon le résultat je retourne 3 objets différents. Je dois créer mes objets dans la fonction CreateRandomObject donc avec un new et l'appel au constructeur de la classe correspondante ..etc
Au lieu de
avecCitation:
Dans la fonction CreateRandomObject je vérifie les valeurs du nombre aléatoire et selon le résultat je retourne 3 objets différents. Je dois créer mes objets dans la fonction CreateRandomObject donc avec un new et l'appel au constructeur de la classe correspondante ..etc
Tu peux faire ceciCode:
1
2
3
4
5 private int minimum=1; private int maximum=3 nombre=Math.round(minimum+Math.random()*(maximum-minimum));
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int r = generator.nextInt(); // Generation d'un nombre aleatoire entre 1 et 3 int value = generator.nextInt(3) + 1; switch (value) { case 1: return Hopital; // Objet Hopital case 2: return Medecin; case 3: return NonMedecin; default: throw new RunTimeException("Objet inconnu"); }
A quoi sert ton r =generator.nextInt()?
Et ceci throw new RunTimeException("Objet inconnu");
J'aimerai aussi savoir et c'est surtout ça le truc principal,c'est comment je vais pouvoir déplacer mes objets dans le tableau. L'énoncé me dit que c'est en appuyant sur une touche que les objets doivent se déplacer.Ils peuvent se déplacer sur une des 8 cases qui entourent la case ou est l'objet à l'état initial. Je ne vois pas comment faire.
Métons à plus tard le problème deLimitons le problème àCitation:
c'est en appuyant sur une touche que les objets doivent se déplacer
Cela dépend beaucoup de ta modélisation mais par exemple la signature de la méthode peut ressembler à ça :Citation:
comment je vais pouvoir déplacer mes objets dans le tableau ?
Code:déplacerElement(Tableau tab, Element element, int nombreCasesVertical, int nombreCasesHhorizontal)
D'accord et en remplaçant Element element par Objet objet par exemple.
Si tu préfères, ça ne change rien sur le principe, c'est juste un peu moins fin.
BOn je commence^^. Avant tout (avant de faire la fonction déplacer), je voudrais créer mon tableau d'objets et insérer les objets dedans.
Ce que j'ai fait : J'ai créé la fonction Object CreateRandomObject qui choisit un nombre entre 1 et 3 et qui selon ce nombre retourne 3 objets différents.Cependant est-ce que je dois créer mes objets dans cette fontion en faisant appel aux constructeurs des classes?
En faisant case 1: return Hopital hop=new Hopital()?
Est ce que ma déclaration du tableau est bonne? ==> protected Object carte= new Object[20][20];
Merci de m'aider !
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 while(i<nombre_objets) { x=generator.nextInt(20)+1; y=generator.nextInt(20)+1; if(carte[x][y]=null) { carte[x][y]=CreateRandomObject(); } } Object CreateRandomObject() { value=generator.nextInt(3)+1; switch(value) { case 1: return Hopital; break; case 2: return Medecin; break; case 3: return Non_medecin; break; } }
Desole j'etais trop vite: il faut remplacer cette ligneCitation:
A quoi sert ton r =generator.nextInt()?
Par celle-ciCode:
1
2 int r = generator.nextInt();
Code:
1
2 Random generator = new Random();
sert dans le cas ou le nombre genere n'est pas conforme (dans 1-3 intervalle).Citation:
Et ceci throw new RunTimeException("Objet inconnu");
Donne-nous ton programme ou tes classes toutes entieres. En attendant, a mon avis, tu dois:
- declarer les 3 classes pour tes 3 objets Hopital, Medecin et NonMedecin
- ecrire une fonction retournant un objet aleatoire (CreateRandomObject)
- ecrire une fonction generant ton tableau 20x20 remplis des objets crees d'une maniere aleatoire (faire attention aux indices commencant a 0)
- C'est un algo a faire: En resume: pour le deplacement d'un objet de 8 cases autour, tu dois verifier certaines choses:
a) combien de possibilites (de cases) que cet objet peut se deplacer
b) est-ce-que la case destination choisie est libre ou non (elle est occupee si un autre objet y est)
c) si ces conditions sont verifiees alors tu fais le deplacement de cet objet vers la case finale en affectant l'objet dans cette case et mettant la case originale a nulle
Voici ma classe Objet, c'est la classe mère, toutes mes autres classes héritent d'elle car c'est là ou je définis le tableau2D et certaines méthodes utilisées par les autres classes(mourrir par exemple).Elle est déclarée abstract puisque une de mes sous classes(hopital) n'utilisent pas la méthode Déplacer.
Voici la classe MedecinCode:
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 import java.util*; abstract public class Objet { protected Object carte= new Object[20][20]; private int x; private int y; private int nombre_objets; private int value; private int ligne; private int colonne; private char representation; abstract Deplacer(Object carte,Object o,int ligne,int colonne) { } Mourrir() {} /*************Initialisation***************************/ Random generator = new Random(); Object CreateRandomObject() { value=generator.nextInt(3)+1; switch(value) { case 1: return Hopital; break; case 2: return Medecin; break; case 3: return Non_medecin; break; } } public static void main (String args[]) { while(i<nombre_objets) { x=generator.nextInt(20)+1; y=generator.nextInt(20)+1; if(carte[x][y]=null) { carte[x][y]=CreateRandomObject(); } } System.out.println(carte); } }
La classe HopitalCode:
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 public class Medecin { private int stock_medecin; private int nombre_medecins; public int getStock() { return stock_medecin; } public void setStock(int stock) { stock_medecin=stock; } public int getNombre_medecins() { return nombre_medecins; } public void setNombre_medecins(int nb_medecins) { nombre_medecins=nb_medecins; } public void Soigner(Object o) {} public Medecin(int stock,int row,int column, char represent) { this.stock_medecin=stock; this.row_medecin=row; this.column_medecin=column; //this.representation=represent; } public static void main (String args[]) { } }
La classe Non_medecinCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 abstract public class Hopital { private int nombre_hopitaux; public int getNombre_hopitaux() { return nombre_hopitaux; } public void Soigner(Object o) {} public void approvisionnement_medecin(Object o) {} public Hopital(int row,int column, char represent) { this.row_hopital=row; this.column_hopital=column; //this.representation=represent; } public static void main (String args[]) { } }
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 public class Non_medecin extends Objet { private int nombre_malade; private int nombre_sains; private int nombre_malade_difficile; private String etat; private int resistance; private int debut_contamination; public int getNombre_malade() { return nombre_malade; } public void setNombre_malade(int nb_malade) { nombre_malade=nb_malade; } public int getNombre_sains() { return nombre_sains; } public void setNombre_malade(int nb_sains) { nombre_sains=nb_sains; } public int getNombre_malade_difficile() { return nombre_malade_difficile; } public void setNombre_malade(int nb_malade_difficile) { nombre_malade_difficile=nb_malade_difficile; } public String getETat() { return etat; } public void setEtat(String et) { etat=et; } public int getDate_contamination() { return debut_contamination; } public void setDate_contamination(int date) { debut_contamination=date; } public int getResistance() { return resistance_maladie; } public void setResistance(int resist) { resistance_maladie=resist; } public void Contaminer(Object o) {} public Non_medecin(String et,int row,int column,int resist,int contamination, char represent) { this.etat=et; this.row_non_medecin=row; this.column_non_medecin=column; this.resistance_maladie=resist, this.debut_contamination=contamination, //this.representation=represent; } public static void main (String args[]) { } }
La méthode main y en a partout, c'est pas bon, crée une classe Main avec une méthode main ça sera le point d'entrée de ton appli bien distinct du reste.
Je ne comprends pas les héritages de ta modélisation :
Objet -> Non_medecin et le reste qui n'hérite de rien...
Le principe de base des objets en programmation c'est généralement de créer une métaphore pour simplifier (rendre plus intuitif) l'utilisation des structures de données.
Concrètement dans ton cas voici un début de truc (à toi de voir si ça colle avec ton exo)
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 Carte { /* * le tableau n'est pas visible à l'extérieur de l'objet. * C'est plus sûr, on y accéde que via des méthodes. */ private Element[][] elements; public Carte() { elements = ...; /* plus tout le reste de l'initalisation de la carte */ } public int getWidth() { } public int getHeight() { } ... }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public abstract class Element { private Carte owner; private int x, y; public Element(Carte owner, int x, int y) { if(x < 0 || >= owner.getWidth()) throw new IllegalArgumentException("x: "+ x); if(y ...) ... ... } public Position getX() { } public Position getY() { } ... }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public class Person extends Element { public Person(Carte owner, int x, int y) { super(owner, x, y); } public void setPosition(int x, int y) { } ... }
Oui j'ai fait une erreur, les autres classes héritent aussi de Objet !
Qu'espères-tu ajouter ici ? La liste des éléments qui peuvent etre présents dans le tableau(hopital,medecin,non_medecin)?? je ne dois pas faire ça dans les constructeurs des différentes classes. Pour ce qui est de l'initialisation du tableau et de la dispersion aléatoire de mes objets dans le tableau, je dois le faire dans le main ou dans la classe Carte?
Enfin, au départ je dois saisir le nombre d'hopitaux, de médecins(qui ne peuvent pas etre malades) ainsi que le nombre de non_medecin(malade et non_malade). Ca je dois le faire dans le main.
Code:
1
2 public Carte() { elements = ...;
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 !