Partage
  • Partager sur Facebook
  • Partager sur Twitter

Can not make a static reference ...

    4 décembre 2016 à 17:55:29

    Bonjour à tous :)

    Je débute en java et depuis quelques semaines, j'essaye de coder un jeu de carte.

    Globalement ça se passe pas trop mal, mais j'ai tout le temps la même erreur qui revient."Cannot make a static reference to the non-static method... "

    J'ai du mal comprendre quelques chose. J'ai une classe partie, qui est un peu le moteur de mon jeu (elle distribue les cartes, créer les joueurs...). Et dans d'autre classe j'ai régulièrement besoins d'informations contenues dans partie. Prenons l'exemple de nbJoueur qui est un attribut de partie. J'ai généré les getter et setter pour accéder a cet attribut. Mais dès que je les utilises dans une autre classe ça me renvoie l'erreur...

    Pourriez vous m'aider ? 

    Bien à vous les développeurs java :*

    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2016 à 17:58:59

      Bonsoir, pourrais-tu nous donner ton code (du moins les parties qui ne fonctionnent pas) s'il te plait ? :)
      • Partager sur Facebook
      • Partager sur Twitter
        4 décembre 2016 à 18:13:15

        Pas de problème :)

        Ma classe partie est énorme du coup je t'en mets qu'un bout (dedans il y a les attributs, après la méthode qui me permet de rentrer les joueurs en entier, puis un des getter pour te montrer que je l'ai ai bien généré :p

        public int nbJoueur;
        	public int numTour;
        	private boolean nbJoueurChoisit;
        	private int joueurTourDeJeu;
        	private int joueurTourDeJoueur;
        	private Scanner sc;
        	private ArrayList<Joueur> joueurs ;
        	private Paquet carteActions;
        	private PaquetDivinite divinites;
        	private int PremierJoueur;
        	private De de;
        
        public void demarrer(){
        		
        		this.numTour =0 ;
        		this.nbJoueurChoisit = false;
        		while(nbJoueurChoisit == false){
        		sc = new Scanner(System.in);
        		System.out.println("Combien voulez vous d'adversaire(s) ? ( doit etre inferieur a�6)");
        		this.nbJoueur= sc.nextInt() +1;
        			// +1 car on ajoute le joueur physique
        				if(this.nbJoueur < 2 || this.nbJoueur > 7){
        					
        				}
        				else {
        					System.out.println("Vous avez choisi " +(this.nbJoueur - 1) +" adversaires" );
        					this.setNbJoueur(this.nbJoueur);
        					this.nbJoueurChoisit = true;
        				}	
        		}
        		
        		
        		for (int i = 0; i< (this.nbJoueur ); i++){
        			int numJoueur= i+1;
        			sc = new Scanner(System.in);
        			System.out.println("Coment s'appelle le joueur" + numJoueur);
        			String Nomjoueur= sc.nextLine();
        			Joueur joueur = new Joueur(Nomjoueur);
        			joueurs.add(joueur);
        			System.out.println(joueurs.get(i).getNom());
        			}
        
        
        public int getNbJoueur() {
        		return nbJoueur;
        


        Ceci est un bout de code dans lequel j'aimerais utiliser les getter et setter de la classe partie, mais ça m'affiche l'erreur

        do{
        					for (int i; i<= Partie.getNbJoueur();i++){
        						sb.append("tapez");
        						sb.append(i);
        						sb.append("pour ");
        						sb.append(Partie.getJoueurs().get(i).getNom());
        						System.out.println(sb.toString());
        					}
        					this.joueurCible = sc.nextInt();
        					}while(this.joueurCible<0 || this.joueurCible>Partie.getNbJoueur());
        				



        • Partager sur Facebook
        • Partager sur Twitter
          4 décembre 2016 à 18:21:17

          Merci, mais le second bout de code se situe-t-il dans une méthode ou classe interne statique s'il te plait ?
          • Partager sur Facebook
          • Partager sur Twitter
            4 décembre 2016 à 18:41:24

            Le second bout de code se situe dans une méthode sacrifier qui se situe dans une classe sacrifice :)
            • Partager sur Facebook
            • Partager sur Twitter
              4 décembre 2016 à 18:51:36

              Bonsoir,

              public int getNbJoueur() {


              Cette méthode n'est pas "static" dans la classe "Partie", vous ne pouvez pas faire :

              for (int i; i<= Partie.getNbJoueur();i++){

              Il faudra revoir la classe "Sacrifice" (les noms de classe commencent par une majuscule).

              Exemple :

              Partie thePartie = new Partie();
              for (int i; i<= thePartie.getNbJoueur();i++){

              Bonne continuation.

              -
              Edité par pctronique 4 décembre 2016 à 18:53:00

              • Partager sur Facebook
              • Partager sur Twitter
                4 décembre 2016 à 19:13:59

                Merci de ton aide pctronique, 

                J'y vois plus clair pour pouvoir utiliser les méthodes qui sont dans mes classes il faut que j'instancie mes classes. Mais je vais pas instancier 50 fois la partie dans chacune des classes qui auront besoins d'un des getters qui se trouve dans partie, si ? 

                • Partager sur Facebook
                • Partager sur Twitter
                  4 décembre 2016 à 19:22:44

                  Après, c'est un problème de programmation, une mauvaise étude du concept. 50, je trouve que ça fait beaucoup, surtout pour reprendre qu'une seule méthode dans les classes.
                  Attention : j'ai montré un exemple, mais à ne pas faire comme ça, sinon la méthode "getNbJoueur" sera vide, il vaudra la valeur par défaut de la classe.
                  Tout dépend du programme et du code.
                  Dans le cas présent, il n'est pas possible de faire la méthode en statique, revoir l'étude du programme ou revoir le code.

                  public class Partie {
                      
                      private int nbJoueur;
                  
                      public Partie(int nbJoueur) {
                          this.nbJoueur = nbJoueur;
                      }
                  
                      public int getNbJoueur() {
                          return nbJoueur;
                      }
                      
                  }
                  public class Sacrifice {
                      
                      private Partie thePartie;
                  
                      public Sacrifice(Partie thePartie) {
                          this.thePartie = thePartie;
                      }
                      
                      public int getNbJoueur() {
                          return this.thePartie.getNbJoueur();
                      }
                      
                      public static void main(String[] args) {
                          Partie thePartie = new Partie(15);
                          Sacrifice theSacrifice = new Sacrifice(thePartie);
                          System.out.println(theSacrifice.getNbJoueur());
                      }
                      
                  }

                  Là, on conserve bien la valeur et on ne recréer pas l'objet de la classe "Partie".


                  -
                  Edité par pctronique 4 décembre 2016 à 19:33:31

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Can not make a static reference ...

                  × 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