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 :

Tableau 2D , comparaison coordonnées et ajout de données


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Points : 19
    Points
    19
    Par défaut Tableau 2D , comparaison coordonnées et ajout de données
    Bonsoir tout le monde !

    N'ayant que 2 semaines d'initiation en Java, j'avoue que j'ai du mal à avancer. D'autant plus qu'on nous a donné un projet à faire à peine 10 jours

    Voila il fait créer un jeu, des cases 15*15, placer des enzymes, des lipides et des métabolites(aléatoirement)
    J'ai réussi à creer la grille 15*15, à placer les lipides (soldats, 20 en tout pour chaque joueur de chaque coté) et les enzymes au fond (8 de chaque coté, 2 en rouge, 2 en bleu, 2 eu jaune, 2 en vert), mais voilà j'ai un soucis avec le random pour distribuer les métabolites sur les cases restantes (40 en tout 10 en rouge, 10 en bleu, 10 en jaune, 10 en vert).

    Le but c'est que les enzymes de la mm couleur mangent les métabolites de la même couleur !

    Ce que je voudrais savoir, c'est comment organiser tout ça, j'avais pensé à une classe principale piece, et comme sous classe, (metabolite, enzyme et lipide), mais voilà j'ai aussi la grille (qui est classe pour l'affichage en mode console)

    En plus du random que je n'arrive pas à fonctionner, j'ai le soucis de la couleur, comment la placer dans le tableau pour comparer après dans les déplacement , sans pour autant que cela me gène pour l’affichage de la grille ?

    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Comme tu as fait des classes (Lipide, Enzyme, Metabolite), tu peux créer une liste dans laquelle tu mets 40 instances de Metabolites. La couleur c'est un attribut, dans la classe Enzyme et dans la classe Metabolite. Donc tu peux générer, avec 4 boucles de 10 itérations (une par couleur), 10 metabolites de chaque couleur et les ajouter à cette liste.

    Pour les distribuer de façon aléatoires, tu peux utiliser la classe Random et sa méthode nextInt( nombre ). Le paramètre nombre c'est la taille de la liste : nextInt( liste.size() ) retourne donc un index aléatoire entre 0 et liste.size()-1 (inclus). Il suffit donc d'appeler metabolite = liste.remove(index) pour retirer la metabolite située à l'index tiré aléatoirement de la liste. Pour obtenir une autre métabolite, tu recommences la même chose (la taille de la liste a diminué de 1 puisqu'on a enlevé une métabolites et on ne pourra pas la choisir à nouveau, puisqu'elle n'est plus dans la liste).
    Ensuite tu peux parcourir les cases, dès que tu rencontres une case libre, tu demandes une métabolite dans la liste.

    Autre solution, beaucoup plus simple, mais que tu n'as peut-être pas le droit d'utiliser pour faire ton exercice : utiliser la méthode shuffle() de la classe Collections : elle permet de mélanger aléatoirement une liste. Il suffit ensuite de retirer une à une les métabolite pour les distribuer dans les cases vides.

  3. #3
    Membre à l'essai Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Points : 19
    Points
    19
    Par défaut
    Où vais-je créer cette liste ? dans la classe "Metabolite" ?
    Autre chose, c'est sur des cases libres (coordonnées en x, y) sur quoi je veux faire le random, pour placer mes metabolites directement !
    Voici le code que j'ai fait, mais je ne sais pas comment faire le lien avec les autres classes, vu que le main je l'ai sur le Plateau(classe)?

    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
    import java.io.*;
    import java.util.*;
    import java.lang.Math;
    import java.util.Random;
     
    public class Plateau{
    	private int nbLig;
    	private int nbCol;
    	private String [][] plateau;
     
    	public Plateau(int n, int p){
    		nbLig = n ;
    		nbCol = p ;
    		plateau = new String  [nbLig][nbCol];
     
    		for (int i=0; i<nbLig; i++){
    			for( int j=0; j<nbCol; j++){
    				plateau[i][j] = "__";
    			}
     
     
    		}
     
    	}
     
    	public void affiche(){
    		System.out.println();
    		System.out.println("   1    2    3    4    5    6    7    8    9    10   11   12   13    14   15 ");
    		System.out.println("------------------------------------------------------------------------------");
    		for(int i=0; i<nbLig; i++){
    			for(int j=0; j<nbCol; j++){
    				System.out.print(" | " +plateau[i][j]);
    			}
    			System.out.println(" | ");
    			System.out.println();
     
    		}
    		System.out.println();
    	}
    	public void placerElement(int lig, int col, String nom){
    		/*Pour commencer a l'indice 0, si placement (1,1) il sera (0,0)*/
    		lig=lig-1; 
    		col=col-1;
    		if (lig>nbLig || lig<0 || col<0 || col>nbCol) {
    			System.out.println("Vous sortez du plateau du jeu");
    			return;
    		}
    		if (plateau[lig][col] == "__"){
    			plateau[lig][col] = nom;
    		}
    		else{
    			System.out.println("Erreur ! , changez d'orientation, elle n'est pas vide la case");
    		}
    		if (lig>3 && lig<11){
    			Math.random(plateau[lig][col]) = nom;
    		}
    	}
    }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Déjà, au lieu de faire un tableau de String (plateau) fais un tableau de Piece. Ensuite, il te faut une méthode remplir() (par exemple) pour placer les pièces (les 2*20 lipides, les 2*8 enzymes, les 40 métabolites). C'est dans cette méthode remplir que tu vas créer la liste de métabolites. Et au moment du démarrage de la partie, tu appelles remplir() pour placer les pièces pour démarrer la partie.

  5. #5
    Membre à l'essai Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Points : 19
    Points
    19
    Par défaut
    Bonjour
    Moi je l'ai fait directement de cette manière ! IL me reste juste de placer les "Metabolite" aléatoirement, c'est là où je ne sais pas trop cmt commencer :/
    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
    import java.io.*;
    import java.util.*;
    import java.lang.Math;
    import java.util.Random;
     
    public class main{
    	public static void main(String[]args){
    		/*creation du plateau*/
    		Plateau Pla1 = new Plateau (15, 15);
    		//placement des enzymes
    		Pla1.placerElement(1,1,"E1"); Pla1.placerElement(1,3,"E1");  Pla1.placerElement(1,5,"E1"); Pla1.placerElement(1,7,"E1");
    		Pla1.placerElement(1,9,"E1"); Pla1.placerElement(1,11,"E1"); Pla1.placerElement(1,13,"E1"); Pla1.placerElement(1,15,"E1");
     
    		Pla1.placerElement(15,1,"E2"); Pla1.placerElement(15,3,"E2"); Pla1.placerElement(15,5,"E2"); Pla1.placerElement(15,7,"E2");
    		Pla1.placerElement(15,9,"E2"); Pla1.placerElement(15,11,"E2"); Pla1.placerElement(15,13,"E2"); Pla1.placerElement(15,15,"E2");
     
    		//placement des lipides L1
    		//ligne2
    		Pla1.placerElement(2,3,"L1"); Pla1.placerElement(2,5,"L1"); Pla1.placerElement(2,7,"L1"); 
        		Pla1.placerElement(2,11,"L1"); Pla1.placerElement(2,9,"L1"); Pla1.placerElement(2,13,"L1");
    		//ligne 3
    		Pla1.placerElement(3,2,"L1"); Pla1.placerElement(3,4,"L1"); Pla1.placerElement(3,6,"L1"); Pla1.placerElement(3,8,"L1");
    		Pla1.placerElement(3,10,"L1"); Pla1.placerElement(3,12,"L1"); Pla1.placerElement(3,14,"L1");
    		//ligne 4
    		Pla1.placerElement(4,1,"L1"); Pla1.placerElement(4,3,"L1"); Pla1.placerElement(4,5,"L1");
    		Pla1.placerElement(4,9,"L1"); Pla1.placerElement(4,11,"L1"); Pla1.placerElement(4,13,"L1");
     
    		//placement des lipides L2
    		//ligne 14
    		Pla1.placerElement(14,3,"L2"); Pla1.placerElement(14,5,"L2"); Pla1.placerElement(14,7,"L2");
    		Pla1.placerElement(14,9,"L2"); Pla1.placerElement(14,11,"L2"); Pla1.placerElement(14,13,"L2");
    		//ligne 13
    		Pla1.placerElement(13,2,"L2");	Pla1.placerElement(13,4,"L2"); Pla1.placerElement(13,6,"L2"); Pla1.placerElement(13,8,"L2");
    		Pla1.placerElement(13,10,"L2"); Pla1.placerElement(13,12,"L2"); Pla1.placerElement(13,14,"L2");
     
    		//ligne 12
    		Pla1.placerElement(12,3,"L2"); Pla1.placerElement(12,5,"L2"); Pla1.placerElement(12,7,"L2"); Pla1.placerElement(12,9,"L2");
    		Pla1.placerElement(12,11,"L2"); Pla1.placerElement(12,13,"L2"); Pla1.placerElement(12, 15,"L2");
     
     
    		//Affichage de la grille de jeu
    		Pla1.affiche();
    		System.out.println("le nouvel element est ");
     
    	}
     
    }

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    A quoi te servent tes classes alors, si c'est pour n'utiliser que des String ? Et les boucles, ça existe aussi. Là, c'est illisible ce code et heureusement qu'il ne pas fallait ajouter 15000 pièces ! Pour les métabolites, j'ai déjà dit comment faire.

  7. #7
    Membre à l'essai Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Points : 19
    Points
    19
    Par défaut
    Je débute en java ! Et je dois dire qu'il y a bcp de choses à assimiler à la fois, je suis vraiment perdue là !!!
    J'ai crée en effet les classes (avec attributs : nom, et couleur), mais pour les fonctions je ne sais pas vraiment quoi mettre à l'intérieur (ne sais pas cmt faire )

    Un tableau de pièce ? avec la classe piece ?

    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
    import java.io.*;
    import java.util.*;
    import java.lang.Math;
    import java.util.Random;
     
    public class Pieces implements Serializable{
    	int lig;
    	int col;
    	String nom;
    	String couleur;
     
    	public Pieces(){
    		int lig=0;
    		int col=0;
    		String nom=null;
    		String couleur=null;
    	}
    	public Pieces(int l){
    		lig=l;
    	}
    	public Pieces(int l, int c){
    		lig = l;
    		col = c;
    	}
    	public Pieces (int l, int c, String name){
    		lig=l;
    		col=c;
    		nom=name;
    	}
    	public Pieces (int l, int c, String name, String color){
    		lig=l;
    		col=c;
    		nom=name;
    		color=couleur;
    	}
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String getCouleur() {
    		return couleur;
    	}
     
    	public void setCouleur(String couleur) {
    		if ((couleur == "Rouge") || (couleur == "Bleu")|| (couleur == "Jaune")|| (couleur == "Vert"))
    			this.couleur = couleur;
    	}
    }
    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
    import java.io.*;
    import java.util.*;
    import java.lang.Math;
    import java.util.Random;
     
    public class Metabolites extends Pieces {
    	public Metabolites (int lig){
    		super (lig);
    	}
    	public Metabolites (int lig, int col){
    		super(lig, col);
    	}
    	public Metabolites(int lig, int col, String nom){
    		super(lig, col, nom);
    	}
    	public Metabolites (int lig, int col, String nom, String couleur){
    		super(lig, col, nom, couleur);
    	}
    	/*public void affiche(){
    		super.affiche();
    	}*/
     
    }

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ne mets pas l'index de ligne et de colonne dans pièce : une pièce c'est une pièce. On connaitra ses coordonnées par le tableau.
    Ensuite, tu peux faire un tableau de Piece (Piece[][]) et mettre des instances de Metabolite ou d'Enzyme dedans parce que ces classes étendent Piece.

    Le nom et la couleur suffise comme attribut de base. Pas la peine de te casser la tête avec tous ces constructeurs : un seul, avec la couleur suffit. Ne casse pas la tête avec la condition sur la couleur ici (en plus ça risque de ne pas fonctionner : il vaut mieux utiliser equals() pour comparer des String) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setCouleur(String couleur) {
    		if ((couleur == "Rouge") || (couleur == "Bleu")|| (couleur == "Jaune")|| (couleur == "Vert"))
    			this.couleur = couleur;
    	}
    Est-ce que tu connais les enum ? Ce serait mieux pour les couleurs (plus pratique).

    Pour le nom, il est fixe pour tout Metabolite : donc pas besoin de le passer en paramètre du constructeur de Metabolite. En fait, il n'y a pas besoin d'en faire un attribut même.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public abstract class Piece { // abstract parce qu'on ne fait jamais de Piece directement
        public Piece() {
        }
        public abstract String getNom();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Metabolite extends Piece {
     
         public Metabolite() {
         }
         public final String getNom() {
              return "Metabolite";
         }
         public String toString() {
              return "M";
         }
    }

  9. #9
    Membre à l'essai Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Points : 19
    Points
    19
    Par défaut
    Ce que je ne comprends pas ou devrais-je créer ce tableau ? Dans la classe pièce ou dans la classe Plateau ?

    Est-ce que tu connais les enum , ...Non non, je ne connais pas, jamais entendu parler :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setCouleur(String couleur) {
    		if ((couleur.equals("Rouge")) || (couleur.equals("Bleu")|| (couleur.equals("Jaune")|| (couleur.equals("Vert"))
    			this.couleur = couleur;
                  }

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Shyma Voir le message
    Ce que je ne comprends pas ou devrais-je créer ce tableau ? Dans la classe pièce ou dans la classe Plateau ?
    Oui dans Plateau, puisque c'est le plateau justement.

    Citation Envoyé par Shyma Voir le message
    Est-ce que tu connais les enum , ...Non non, je ne connais pas, jamais entendu parler :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setCouleur(String couleur) {
    		if ((couleur.equals("Rouge")) || (couleur.equals("Bleu")|| (couleur.equals("Jaune")|| (couleur.equals("Vert"))
    			this.couleur = couleur;
                  }
    Tu n'as peut être pas encore le droit de les utiliser alors.
    Tu peux écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public enum Couleur {
         ROUGE,
         VERT,
         BLEU,
         JAUNE
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public void setCouleur(Couleur couleur) {
    	this.couleur = couleur;
    Et pour l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    piece.setCouleur(Couleur.ROUGE);
    Pour tester si c'est la même couleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    piece1.getCouleur()==piece2.getCouleur();

  11. #11
    Membre à l'essai Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Points : 19
    Points
    19
    Par défaut
    Cette écriture est-elle juste ?
    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
    import java.io.*;
    import java.util.*;
    import java.lang.Math;
     
    public class Plateau{
    	private int nbLig;
    	private int nbCol;
    	private Pieces [][] place;
    	//Pieces item=new Pieces();
     
    	public Plateau(int n, int p){
    		nbLig = n ;
    		nbCol = p ;
    		Pieces [][]place = new Pieces  [nbLig][nbCol];
     
    		for (int i=0; i<nbLig; i++){
    			for( int j=0; j<nbCol; j++){
    				(place[i][j]).equals("__");
    			}
     
     
    		}
     
    	}
     
    	public void affiche(){
    		System.out.println();
    		System.out.println("   1    2    3    4    5    6    7    8    9    10   11   12   13    14   15 ");
    		System.out.println("------------------------------------------------------------------------------");
    		for(int i=0; i<nbLig; i++){
    			for(int j=0; j<nbCol; j++){
    				System.out.print(" | " +place[i][j]);
    			}
    			System.out.println(" | ");
    			System.out.println();
     
    		}
    		System.out.println();
    	}
    	public void placerElement(int lig, int col, String nom){
    		/*Pour commencer a l'indice 0, si placement (1,1) il sera (0,0)*/
    		lig=lig-1; 
    		col=col-1;
    		if (lig>nbLig || lig<0 || col<0 || col>nbCol) {
    			System.out.println("Vous sortez du plateau du jeu");
    			return;
    		}
    		if ((place[lig][col]).equals("__")){
    			(place[lig][col]).equals(nom);
    		}
    		else{
    			System.out.println("Erreur ! , changez d'orientation, elle n'est pas vide la case");
    		}
    		if (lig>3 && lig<11){
    			/*Math.random(plateau[lig][col]) = nom;*/
     
    			Random r = new Random();
    				int nouvelElement = r.nextInt(105);
    			System.out.println("Le nouveau element"+ nouvelElement);	
    		}
    	}
     
    }
    Et puis je n'arrive pas à l'afficher quand je fais l'appel !!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class main{
    	public static void main(String[]args){
    		/*creation du plateau*/
    		Pieces [][]Pla1 = new Pieces [15][15];
                    (Pla1 [][]).affiche();

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Shyma Voir le message
    Cette écriture est-elle juste ?
    J'ai mis des commentaires dans le code :
    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
    import java.io.*;
    import java.util.*;
    import java.lang.Math;
     
    public class Plateau{
    	private int nbLig;
    	private int nbCol;
    	private Pieces [][] place; // attribut
    	//Pieces item=new Pieces();
     
    	public Plateau(int n, int p){
    		nbLig = n ;
    		nbCol = p ;
    		Pieces [][]place = new Pieces  [nbLig][nbCol]; // attention, cette variable place n'est pas la même que celle où j'ai mis le commentaire // attribut : elle remplace cette variable dans le constructeur, et l'attribut restera à null
     
    		for (int i=0; i<nbLig; i++){
    			for( int j=0; j<nbCol; j++){
    				(place[i][j]).equals("__");  // je ne sais pas ce tu veux faire ici, mais ça test l'égalité d'une Piece avec une String, ce qui est impossible : en plus, ça va planter (NullPointerException) parce que le tableau place est vide. // en plus un equals() sans if, ne sert pas à grand chose.
    			}
     
     
    		}
     
    	}
     
    	public void affiche(){
    		System.out.println();
    		System.out.println("   1    2    3    4    5    6    7    8    9    10   11   12   13    14   15 ");
    		System.out.println("------------------------------------------------------------------------------");
    		for(int i=0; i<nbLig; i++){
    			for(int j=0; j<nbCol; j++){
    				System.out.print(" | " +place[i][j]); // ceci ne fonctionnera que si tu as bien implémenté toString() dans les classes Piece, Metabolite, Lipide et Enzyme ! Et que tu as auras donné une valeur à place (cette variable vaut null : voir le commentaire dans le constructeur)
    			}
    			System.out.println(" | ");
    			System.out.println();
     
    		}
    		System.out.println();
    	}
    	public void placerElement(int lig, int col, String nom){
    		/*Pour commencer a l'indice 0, si placement (1,1) il sera (0,0)*/
    		lig=lig-1; 
    		col=col-1;
    		if (lig>nbLig || lig<0 || col<0 || col>nbCol) {
    			System.out.println("Vous sortez du plateau du jeu");
    			return;
    		}
    		if ((place[lig][col]).equals("__")){ // comme déjà dit ça ne fonctionnera pas
    			(place[lig][col]).equals(nom); // je ne sais pas ce que tu essayes de faire ici, mais c'est la même remarque que précédemment (nom est une String)
    		}
    		else{
    			System.out.println("Erreur ! , changez d'orientation, elle n'est pas vide la case");
    		}
    		if (lig>3 && lig<11){
    			/*Math.random(plateau[lig][col]) = nom;*/
     
    			Random r = new Random();
    				int nouvelElement = r.nextInt(105);
    			System.out.println("Le nouveau element"+ nouvelElement);	
    		}
    	}
     
    }
    Citation Envoyé par Shyma Voir le message
    Et puis je n'arrive pas à l'afficher quand je fais l'appel !!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class main{
    	public static void main(String[]args){
    		/*creation du plateau*/
    		Pieces [][]Pla1 = new Pieces [15][15];
                    (Pla1 [][]).affiche(); // il n'y a pas de méthode affiche() sur un tableau, donc ça ne doit même pas compiler

    Il faut vraiment que tu revoies les bases.
    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 Plateau{
    	private int nbLig;
    	private int nbCol;
    	private Pieces[][] place; // attribut
    	//Pieces item=new Pieces();
     
    	public Plateau(int n, int p){
    		nbLig = n ;
    		nbCol = p ;
    		place = new Pieces  [nbLig][nbCol];  // on créé un tableau et on le met dans la variable attribut place
                    /* ... */
            }
    }
    Pour remplir le tableau, il faut que tu crées des instances des classe Lipide, Enzyme, Metabolites, en utilisant new. Et il faut mettre ces instances dans le tableau place. Attention, rappel : les index de cases de tableau vont de 0 à taille du tableau moins un. Donc la première case de la première ligne (en haut à gauche) à pour coordonnées 0,0.

    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
     
    public class Plateau{
    	private int nbLig;
    	private int nbCol;
    	private Pieces[][] place; // attribut
    	//Pieces item=new Pieces();
     
    	public Plateau(int n, int p){
    		nbLig = n ;
    		nbCol = p ;
    		place = new Pieces  [nbLig][nbCol];  // on créé un tableau et on le met dans la variable attribut place
     
                    // par exemple : ici on place des Lipides sur toute la première ligne
                    for(int i=0; i<nbCol; i++) { // on parcourt les colonnes
                          place[0][i] = new Lipide(); // on met une nouvelle pièce de type Lipide (il faudra peut-être ajuster l'appel : par exemple, il y a peut-être l'identifiant de joueur à passer en paramètre !!!
                    }
     
                    // autre exemple :
                    place[1][0] = new Enzyme(Couleur.ROUGE); // met une enzyme ROUGE sur la case deuxième ligne (en partant du haut), première colonne
     
                    /* ... */
                   // autre exemple :
                    List<Metabolite> metabolites = new ArrayList<>();
                    for(int i=0; i<8; i++) { // on créé 8 métabolites rouge
                           metabolites.add(new Metabolite(Couleur.ROUGE));
                    }
                     for(int i=0; i<8; i++) { // on créé 8 métabolites bleu
                           metabolites.add(new Metabolite(Couleur.BLEU));
                     }
                    // il ya maintenant 16 métabolites dans la liste
                    Random random = new Random();
     
                    for(int lig=2; lig<4 && !metabolites.isEmpty(); lig++) { // on parcourt 2 lignes (tant qu'il y a des métabolites à placer dans la liste)
                       for(int i=0; i<nbCo && !metabolites.isEmpty()l; i++) { // on parcourt les colonnes (tant qu'il y a des métabolites à placer dans la liste)
                          int nm = random.nextInt( metabolites.size() ); // on tire un nombre aléatoirement qui correspond à un index de Metabolite dans la lsite
                          place[lig][i] = metabolites.remove( nm ); // on enlève la métabolite tirée aléatoirement de la liste et on la met dans la case actuelle du tableau
                       }
                    }
            }
    }
    Tu vois le principe ? Adapte-le alors aux règles de placement qu'on t'a données.

  13. #13
    Membre à l'essai Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Points : 19
    Points
    19
    Par défaut
    Merci bien c'est de loin ce que j'ai pu imaginer !
    Mais du coup cmt faire appel à la méthode affiche, il me dit que cela ne correspond puisque il ne s'agit plus de String (Pieces) ?

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Cette méthode que tu as faite continue de fonctionner :

    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 void affiche(){
    		System.out.println();
    		System.out.println("   1    2    3    4    5    6    7    8    9    10   11   12   13    14   15 ");
    		System.out.println("------------------------------------------------------------------------------");
    		for(int i=0; i<nbLig; i++){
    			for(int j=0; j<nbCol; j++){
    				System.out.print(" | " +place[i][j]);
    			}
    			System.out.println(" | ");
    			System.out.println();
     
    		}
    		System.out.println();
    	}
    Seulement, comme place est un tableau de Piece (et plus de String), ça va utiliser la méthode toString() pour déterminer la String à afficher à la place. Donc le principe c'est d'implémenter la méthode toString() dans les classes Lipides, Enzymes et Metabolites.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Lipides {
     
         /*...*/
     
         public String toString() {
             return "LP"; // ou "LIPIDE", ou "LPD", ou "(*)", ou ce que tu veux...
         }
     
    }
    Si le joueur doit pouvoir être vu, il faut donc une classe Joueur, et que Lipides ait un attribut de type Joueur, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Lipides {
         private Joueur joueur;
         public Lipides(Joueur joueur) {
             this.joueur=joueur;
         }
     
         public String toString() {
             return "LP"+joueur.getNumero(); // affiche "LP1" pour le joueur 1 et "LP2" pour le joueur 2
         }
     
    }
    Pour la couleur, c'est la même idée : il faut pouvoir représenter la couleur par une String et la concaténer dans toString() à un prefixe (EZ pour enzyme par exemple, et MT pour métabolites). Malheureusement, si on peut afficher en console des éléments en couleur sous linux, on ne peut pas le faire de manière standard sous Windows.

  15. #15
    Membre à l'essai Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Points : 19
    Points
    19
    Par défaut
    J'a essayé de refaire, mais je n'arrive tjrs pas à afficher la grille, car e premier lieu ce n'est pas les métabolites, les lipides ou les enzymes que je voudrais afficher mais la grille en elle même, mais dans le main quand je fais l'appel comme avant cela ne marche pas, je en'arrive plus à écrire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Plateau Pla1 = new Plateau (15, 15);
    Pla1.affiche()
    Bien que j'ai ajouté le String toString dans les sous classes !!!

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Comment ça ne marche pas ? Qu'est-ce qu'il se passe ?

  17. #17
    Membre à l'essai Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Points : 19
    Points
    19
    Par défaut
    Il me met tjrs incompatible type ! Bien que j'ai ajouté String toString dans les sous classes !

    Je ne sais pas, mais la méthode affiche dans la classe main, ne marche pas !

  18. #18
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Shyma Voir le message
    Il me met tjrs incompatible type ! Bien que j'ai ajouté String toString dans les sous classes !
    Quel est le code où tu as ça ?

    Citation Envoyé par Shyma Voir le message
    Je ne sais pas, mais la méthode affiche dans la classe main, ne marche pas !
    Ça ne marche pas ne veut rien dire. Soit il y a une erreur et donc un message d'erreur, soit ça fait quelque chose qu'on ne veut pas, soit ça fait pas quelque chose qu'on voudrait. Comment veux-tu que je devine ce que ça fait ou pas ?

  19. #19
    Membre à l'essai Avatar de Shyma
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 100
    Points : 19
    Points
    19
    Par défaut
    Voilà, si je déclare mon attribut dans la classe Plateau de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Pieces [][] place;
    ET je créer un tableau ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pieces [][]place = new Pieces  [nbLig][nbCol];
    Dans le main, je ne peux plus faire l'appel comme avant il me met une erreur , incompatible type (pla1.affiche())
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Pieces [][]Pla1 = new Pieces [15][15];
    		Pla1.affiche();

  20. #20
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Shyma Voir le message
    Voilà, si je déclare mon attribut dans la classe Plateau de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Pieces [][] place;
    ET je créer un tableau ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pieces [][]place = new Pieces  [nbLig][nbCol];
    Dans le main, je ne peux plus faire l'appel comme avant il me met une erreur , incompatible type (pla1.affiche())
    Tu peux me mettre le code exact complet, et non pas des bribes et des extraits...

    Citation Envoyé par Shyma Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Pieces [][]Pla1 = new Pieces [15][15];
    		Pla1.affiche();
    Bah oui, il n'existe pas de méthode affiche() pour le type tableau Java !!!

    Pourquoi tu ne fais plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Plateau Pla1 = new Plateau (15, 15);
    Pla1.affiche();
    C'est la méthode affiche() de la classe Plateau qui est appelée là, méthode que tu as faite depuis le début et que je t'ai dit qu'elle fonctionnait.

Discussions similaires

  1. Ajouter des données dans un tableau
    Par merlinerick dans le forum JDBC
    Réponses: 1
    Dernier message: 11/03/2010, 16h47
  2. Ajout de Donné dans un nouveau Tableau
    Par nicocovic dans le forum ASP.NET
    Réponses: 1
    Dernier message: 31/01/2010, 19h33
  3. Réponses: 13
    Dernier message: 30/03/2009, 16h53
  4. [POO] ajouter des données dans un tableau contenant une structure
    Par Peanut dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/02/2009, 19h41
  5. Réponses: 3
    Dernier message: 17/04/2008, 20h58

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