Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème pour passer un array en paramètre

Sujet résolu
    26 novembre 2015 à 11:43:39

    Bonjour,

    J'essaye de créer une instance de classe en passant un array de Strings en paramètre mais je fais certainement un erreur de syntaxe et je ne trouve pas laquelle.

    Ma classe JeuDeHasard

    class JeuDeHasard {
    	
    	private Joueur[] joueur;
    	
    	// constructeur
    	JeuDeHasard(String[] tableauJoueurs) {
    		for(byte i=0; i<tableauJoueurs.length; i++) {
    			joueur[i] = new Joueur(tableauJoueurs[i]);
    		}
    	}
    	
    	// methods
    	void jouer() {
    		for (byte i=0; i<10;i++) {
    			System.out.println("Partie " + (i+1));
    			for (byte j=0; j<joueur.length; j++) {
    				joueur[j].aTonTour();
    			}
    			System.out.println("-----");
    		}
    				
    		System.out.println("=====");
    		
    		int maxValue = 0;
    		String winner = "";
    		for (byte i=0; i<joueur.length; i++) {
    			if (joueur[i].getScore() > maxValue) {
    				maxValue = joueur[i].getScore();
    			}
    		}
    		for (byte i=0; i<joueur.length; i++) {
    			if (joueur[i].getScore() == maxValue) {
    				winner += "Joueur" + (i+1) + " - ";
    			}
    		}
    		
    		System.out.println("Le(s) " + winner + " a(ont) gagne. Son(leur) score est de : " + maxValue);
    		
    		System.out.println("=====");
    	}
    	
    }

    Ma classe Joueur dont je crée des instances dans JeuDeHasard

    class Joueur {
    	
    	private Gobelet gobelet;
    	private String nom;
    	private int score;
    	
    	// constructors
    	Joueur() {
    		this("Inconnu");
    	}
    	
    	Joueur(String nom) {
    		gobelet = new Gobelet();
    		this.nom = nom;
    		score = 0;
    	}
    	
    	//getters
    	String getNom() {
    		return nom;
    	}
    	
    	int getScore() {
    		return score;
    	}
    	
    	//setters
    	
    	// methods
    	private void incrementerScore() {
    		score +=1;
    	}
    	void aTonTour() {
    		gobelet.lancer();
    		if (gobelet.getValeurFace() >= 7) {
    			incrementerScore();
    		}
    		System.out.println("Le " + nom + " a lance le gobelet et obtenu : " + gobelet.getValeurFace());
    		System.out.println("\tSon score est : " + score);
    	}
    
    }

    et ma classe Depart avec la méthode main()

    class Depart {
    	
    	public static void main(String[] args) {
    		String[] tableauJoueurs;
    		tableauJoueurs = new String[] {"Toto", "Titi", "Riri", "Fifi"};
    		
    		JeuDeHasard jeuDeHasard2 = new JeuDeHasard(tableauJoueurs);
    		jeuDeHasard2.jouer();
    		
    	}
    }

    Lorsque je fais tourner, je reçois le message d'erreur suivant

    Exception in thread "main" java.lang.NullPointerException
    	at JeuDeHasard.<init>(JeuDeHasard.java:8)
    	at Depart.main(Depart.java:7)

    Si quelqu'un peut m'aider.

    Merci d'avance




    -
    Edité par gece 26 novembre 2015 à 11:49:54

    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2015 à 11:51:05

      Bonjour.

      Quelle est l'erreur ?

      PS : ton attribut joueur est initialisé dans ton constructeur sans avoir été instancié, peut-être est-ce là l'erreur ?

      • Partager sur Facebook
      • Partager sur Twitter
      Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
        26 novembre 2015 à 11:53:09

        Bonjour,

        L'erreur est donnée à la fin de mon message (j'ai dû l'éditer car j'avais oublié une partie)

        Je ne comprends pas vraiment ta réponse. Dans mon constructeur

        // constructeur
            JeuDeHasard(String[] tableauJoueurs) {
                for(byte i=0; i<tableauJoueurs.length; i++) {
                    joueur[i] = new Joueur(tableauJoueurs[i]);
                }
            }

        'joueur[i] = new Joueur(tableauJoueurs[i]);' c'est une instanciation, non?

        -
        Edité par gece 26 novembre 2015 à 11:58:24

        • Partager sur Facebook
        • Partager sur Twitter
          26 novembre 2015 à 12:02:07

          Salut,

          Il faut lui préciser sa taille avant :

          // constructeur
              JeuDeHasard(String[] tableauJoueurs) {
                  joueur = new Joueur[tableauJoueurs.lenth];
                  for(byte i=0; i<tableauJoueurs.length; i++) {
                      joueur[i] = new Joueur(tableauJoueurs[i]);
                  }
              }



          • Partager sur Facebook
          • Partager sur Twitter
            26 novembre 2015 à 12:05:57

            Tu instancies un Joueur...
            et ensuite tu l'insères dans un tableau ... qui lui n'a pas été initialisé !
            • Partager sur Facebook
            • Partager sur Twitter
            Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
              26 novembre 2015 à 12:13:54

              J'ai compris ! Je fais vraiment des erreurs de débutant.

              Merci à tous les deux.

              -
              Edité par gece 8 janvier 2016 à 18:12:06

              • Partager sur Facebook
              • Partager sur Twitter
                26 novembre 2015 à 12:18:01

                Je te conseiller d'apprendre dès que possible l'utilisation du débogueur.
                • Partager sur Facebook
                • Partager sur Twitter
                Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                  26 novembre 2015 à 18:14:45

                  Pour le moment, le prof nous fait travailler exclusivement avec Notepad++ partant de l'argument que si on passe directement à Eclipse, on ne saura pas coder.

                  Donc j'ai les messages d'erreurs et c'est tout et quelquefois ça ne me parle pas vraiment.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 novembre 2015 à 20:59:14

                    Et bien les messages d'erreur de compilation ou d'exécution (stack trace) sont exactement les mêmes que dans un IDE.
                    Par contre le débogage c'est dans un IDE effectivement, donc lorsque tu passeras à l'IDE tu pourras l'étudier.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                      26 novembre 2015 à 22:51:57

                      Je trouve vraiment dommage que ton prof vous fais travailler sur Notepad++, être bon en programmation signifie certes être bon dans un langage, mais aussi dans l'utilisation de l'IDE (eclipse dans ton case).

                      Sinon je te conseil de prendre l'habitude de travailler avec des collections à l'avenir, une ArrayList aurait été parfaitement adaptée à ton code, je te laisse regarder par toi même :

                      https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 novembre 2015 à 11:54:10

                        @dylanlecomte : Oui, les collections d'objets seraient certainement tout à fait adaptées dans ce cas. J'ai déjà un peu survolé le sujet. Je n'en suis pas encore là mais ça viendra
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Problème pour passer un array en paramètre

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown