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

Java Discussion :

Problème pour jeu de la vie


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Alternant concepteur développeur
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Alternant concepteur développeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut Problème pour jeu de la vie
    Bonsoir,
    Après moulte recherches je ne trouve pas la solution à mon problème. Je suis sure que c'est une erreur de bleu mais bon voila mon code:

    Game.java
    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
     
     
    package vie;
    import java.util.HashSet;
     
    class Game {
        private HashSet<Coord> damier;
        private int nbLigs, nbCols;
     
        //constructeur
        public Game(Coord[] listeInitiale, int nbLigs, int nbCols){
            this.nbLigs = nbLigs;
            this.nbCols = nbCols;
            for(int i = 0;i<listeInitiale.length;i++){
                this.damier.add(listeInitiale[i]);
            }
        }
     
        public Game(int nbLigs, int nbCols){
            this.damier.clear();
        }
        public boolean estVivante(Coord coord){
            return damier.contains(coord);
        }
        private String showCell(Coord coord){
            if(estVivante(coord)) return "#";
            return ".";
        }
        private String showLig(int numLig){
            String Lig = "";
            for(int i = 0;i<nbCols;i++){
                Coord coord = new Coord(numLig,i);
                Lig = Lig + showCell(coord) + " ";
            }
            return Lig;
        }
     
        @Override
        public String toString(){
            String grilleJeu="";
            String newLine = System.getProperty("line.separator");
            for(int i = 0;i<this.nbLigs;i++){
                grilleJeu = showLig(i) + newLine;
            }
            return grilleJeu;
        }
     
     
        public static void main (String args[]) {
    	Coord[] coords = {new Coord(0, 3), new Coord(1, 2), new Coord(2, 2), new Coord(2, 3), new Coord(2, 4)};
     
            Game jeu = new Game(coords, 5, 5);
     
            System.out.println(jeu);
        }
     
    }
    Coord.java
    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
     
    package vie;
     
     
    class Coord {
     
    	int lig, col;
     
            //constructeur
    	public Coord(int lig, int col){
    		this.lig = lig;
    		this.col = col;
    	}
     
    	@Override
    	public boolean equals(Object o){
                    if(this == (Coord) o) return true;
                    if(!(o instanceof Coord)) return false;
    		Coord x = (Coord) o;
    		return this.lig == x.lig && this.col == x.col;
    	}
     
            @Override
            public int hashCode() {
                return String.format("%s,%s", this.lig, this.col).hashCode();
            }
     
     
    	public static void main (String args[]) {
     
    	}
    }
    Et quand je compile seulement pour afficher les cellules pour tester ce morceau(je suis au début) j'ai une erreur comme ça:
    run:
    Exception in thread "main" java.lang.NullPointerException
    at vie.Game.<init>(Game.java:14)
    at vie.Game.main(Game.java:51)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)
    Il semblerait que l'erreur soit à la ligne 14 donc celle ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.damier.add(listeInitiale[i]);
    Donc l'erreur dit qu'il reçoit un null et que ça devrait pas si je comprend bien,du coup un peu d'aide pour savoir pourquoi il n'y a rien dans mon tableau alors que je l'initialise bien dans mon main?
    Merfi!

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Mars 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 21
    Points : 33
    Points
    33
    Par défaut
    Bonsoir,

    Ce que tu passes est correctement initialisé, c'est ce dans quoi tu essaie de l'entrer qui est null. En gros tu n'as pas initialisé le Damier,
    ligne 8 un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Set<Coord> damier = new HashSet<>();
    serait nettement mieux. D'abord cela corrigerait ton erreur et en plus il est préférable d'utilser l'interface pour la partie déclarative (lorsque tu utilise le damier, ce qui t'intéresse c'est que cela soit un Set, après que cela soit un TreeSet ou un HashSet c'est un choix que tu peux vouloir remettre en cause à tout moment sans que cela change quoi que ce soit dans le reste de ton code).

    Au passage quelques bonnes petites habitudes à prendre, l'autoboxing, c'est super pratique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            for(int i = 0;i<listeInitiale.length;i++){
                this.damier.add(listeInitiale[i]);
            }
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            for(Coord aCoord:listeInitiale){
                this.damier.add(aCoord);
            }
    et il y a tout de suite beaucoup moins de risques d'erreurs et c'est plus facile à lire.

    Enfin, il n'est pas nécessaire d'avoir une méthode main dans ta classe Coord.

    Bon courage pour ton jeu.

  3. #3
    Membre éclairé Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Points : 882
    Points
    882
    Par défaut
    Laissons les collections Java tout faire pour nous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.damier = new HashSet<Coord>(Arrays.asList(listeInitiale));
    Ou, si on préfère garder le early initializing:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private Set<Coord> damier = new HashSet<>();
    ...
    public Game(Coord[] listeInitiale, int nbLigs, int nbCols) {
     this.nbLigs = nbLigs;
     this.nbCols = nbCols;
     this.damier.add(Arrays.asList(listeInitiale));
    }
     
    public Game(Coord[] listeInitiale) {
     this(listeInitiale,listeInitiale.size(),listeInitiale.size());
    }

  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 : 54
    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,

    Une petite coquille dans le code de @Lorantus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private Set<Coord> damier = new HashSet<>();
    ...
    public Game(Coord[] listeInitiale, int nbLigs, int nbCols) {
     this.nbLigs = nbLigs;
     this.nbCols = nbCols;
     this.damier.addAll(Arrays.asList(listeInitiale));
    }
    A noter qu'on pourrait aussi faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private Set<Coord> damier;
    ...
    public Game(Coord[] listeInitiale, int nbLigs, int nbCols) {
     this.nbLigs = nbLigs;
     this.nbCols = nbCols;
     this.damier = Arrays.stream(listeInitiale).collect(Collectors.toSet());
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Alternant concepteur développeur
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Alternant concepteur développeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Merci pour tout,effectivement c'est le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.damier = new HashSet<>();
    qui me manquait!

Discussions similaires

  1. Problème pour le jeu de tests
    Par bolltt dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/01/2008, 23h05
  2. Problème pour le jeu de la vie
    Par daninou dans le forum Débuter
    Réponses: 8
    Dernier message: 04/12/2007, 21h14
  3. Problème pour un jeu de pong
    Par Galip dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/04/2007, 08h28
  4. Problème jeu de la vie de Wolfram
    Par romromp dans le forum Pascal
    Réponses: 14
    Dernier message: 11/03/2007, 19h58
  5. Conway's life (jeu de la vie) pour images
    Par O( N ) dans le forum C
    Réponses: 1
    Dernier message: 26/09/2006, 02h13

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