IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Fonction pour se déplacer dans un tableau 2D ?


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut Fonction pour se déplacer dans un tableau 2D ?
    Bonjour, je cherche une fonction java pour faire déplacer un objet dans un tableau 2D d'objets en java.Est-ce possible?

  2. #2
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    bonsoir,

    faut 2 boucles for pour pouvoir parcourir chaque élément

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    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 ?

  4. #4
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    J'ai pas tout compris mais peut-être que ça peut ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(...) {
       for(...) {
          tableau2D[i][j] = createRandomObject();
       }
    }
    et à chaque appel de createRandomObject(), tu crées un objet au hasard.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    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/

  6. #6
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Il faut que je dispose un certain nombre d'objets aléatoirment dans le tableau 2D.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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();
    	}
    }

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    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 ?

  8. #8
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    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
    Valeur Objet
    0 Hopital
    1 Medecin
    2 Non medecin

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    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.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    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

  11. #11
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Au lieu de
    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
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private int minimum=1;
    private int maximum=3
     
    nombre=Math.round(minimum+Math.random()*(maximum-minimum));
    Tu peux faire ceci
    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
     
    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");
    }

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    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.

  13. #13
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Métons à plus tard le problème de
    c'est en appuyant sur une touche que les objets doivent se déplacer
    Limitons le problème à
    comment je vais pouvoir déplacer mes objets dans le tableau ?
    Cela dépend beaucoup de ta modélisation mais par exemple la signature de la méthode peut ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    déplacerElement(Tableau tab, Element element, int nombreCasesVertical, int nombreCasesHhorizontal)

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    D'accord et en remplaçant Element element par Objet objet par exemple.

  15. #15
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Si tu préfères, ça ne change rien sur le principe, c'est juste un peu moins fin.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    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 : 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
    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;
    		}
    	}

  17. #17
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    A quoi sert ton r =generator.nextInt()?
    Desole j'etais trop vite: il faut remplacer cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int r = generator.nextInt();
    Par celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Random generator = new Random();
    Et ceci throw new RunTimeException("Objet inconnu");
    sert dans le cas ou le nombre genere n'est pas conforme (dans 1-3 intervalle).


    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

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    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.

    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
    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);
    	}	
    }
    Voici la classe Medecin



    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
    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 Hopital


    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
    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[]) {		
     
    	}
    }
    La classe Non_medecin


    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
    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[]) {		
     
    	}
    }

  19. #19
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    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 : 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
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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) {
     
    	}
     
    	...
     
    }

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     public Carte() {
    		elements = ...;

Discussions similaires

  1. une fonction pour le bgcolor dans une datatable
    Par ghnawfal dans le forum JSF
    Réponses: 2
    Dernier message: 09/04/2008, 14h33
  2. Réponses: 3
    Dernier message: 22/03/2008, 12h48
  3. Réponses: 9
    Dernier message: 05/11/2007, 12h05
  4. Réponses: 1
    Dernier message: 05/09/2006, 18h56
  5. Problème pour centrer verticalement dans un tableau
    Par navis84 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 18/07/2006, 17h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo