Partage
  • Partager sur Facebook
  • Partager sur Twitter

tuto java de cysboy... qui peut décrypter ce code?

this.setCategorie

    17 juillet 2019 à 1:19:46

    Bonjour,

    je suis le tuto de cysboy sur Java, et je ne comprends pas une chose à propos du mot clé this

    public class Ville {
     
      private String nomVille;
      private String nomPays;
      private int nbreHabitants;
      private char categorie;
       
      public Ville(){
        System.out.println("Création d'une ville !");          
        nomVille = "Inconnu";
        nomPays = "Inconnu";
        nbreHabitants = 0;
        this.setCategorie();
      }// que représente le this ici?
     
      public Ville(String pNom, int pNbre, String pPays)
      {
        System.out.println("Création d'une ville avec des paramètres !");
        nomVille = pNom;
        nomPays = pPays;
        nbreHabitants = pNbre;
        this.setCategorie();
      }  
        
      //Retourne le nom de la ville
      public String getNom()  {  
        return nomVille;
      }
    
      //Retourne le nom du pays
      public String getNomPays()
      {
        return nomPays;
      }
    
      // Retourne le nombre d'habitants
      public int getNombreHabitants()
      {
        return nbreHabitants;
      } 
    
      //Retourne la catégorie de la ville
      public char getCategorie()
      {
        return categorie;
      } 
     
      //Définit le nom de la ville
      public void setNom(String pNom)
      {
        nomVille = pNom;
      }
    
      //Définit le nom du pays
      public void setNomPays(String pPays)
      {
        nomPays = pPays;
      }
    
      //Définit le nombre d'habitants
      public void setNombreHabitants(int nbre)
      {
        nbreHabitants = nbre;
        this.setCategorie();
      }  
     
      //Définit la catégorie de la ville
      private void setCategorie() {
     
        int bornesSuperieures[] = {0, 1000, 10000, 100000, 500000, 1000000, 5000000, 10000000};
        char categories[] = {'?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
    
        int i = 0;
        while (i < bornesSuperieures.length && this.nbreHabitants > bornesSuperieures[i])
          i++;
    
        this.categorie = categories[i];
      }
    
      //Retourne la description de la ville
      public String decrisToi(){
        return "\t"+this.nomVille+" est une ville de "+this.nomPays+ ", elle comporte : "+this.nbreHabitants+" habitant(s) => elle est donc de catégorie : "+this.categorie;
      }
    
      //Retourne une chaîne de caractères selon le résultat de la comparaison
      public String comparer(Ville v1){
        String str = new String();
    
        if (v1.getNombreHabitants() > this.nbreHabitants)
          str = v1.getNom()+" est une ville plus peuplée que "+this.nomVille;
         
        else
          str = this.nomVille+" est une ville plus peuplée que "+v1.getNom();
         
        return str;
      }
    }

    je ne comprends pas comment fonctionne le this dans ce code? qui peut m'expliquer? surtout pour le this.setCategorie

    Merci

    -
    Edité par zounaa 17 juillet 2019 à 1:24:45

    • Partager sur Facebook
    • Partager sur Twitter
      17 juillet 2019 à 1:29:14

      Salut 

      Je fais pas de Java mais this veut dire ici cet pour cet objet. 

      Généralement, après le point tu as un attribut ou une méthode si elle se termine par des parenthèses. Ici quand tu vas instancier un objet Ville, ça va appeler la méthode setCategorie construite plus bas. 

      • Partager sur Facebook
      • Partager sur Twitter
        17 juillet 2019 à 1:34:32

        Merci Cobriste128 pour ta réponse:

        donc dans:

        public Ville(String pNom, int pNbre, String pPays)
          {
            System.out.println("Création d'une ville avec des paramètres !");
            nomVille = pNom;
            nomPays = pPays;
            nbreHabitants = pNbre;
            this.setCategorie();

        this représente Ville? on pourrait l'écrire Ville.setCategorie(); ?

        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2019 à 10:11:20

          Bonjour,

          On ne peut pas écrire Ville.setCategorie();

          Mais on pourrait écrire setCategorie(); et ça marcherait car le mot this n'est souvent pas obligatoire. Et dans ce cas précis, il s'agit d'invoquer une méthode.

          Voilà les cas de figure où on met le mot this :

          1-référence à une variable de classe

          2-comme argument d'une méthode

          3-pour retourner un objet de la classe

          4-invoquer le constructeur de la classe

          5-invoquer une méthode

          Tu as plus d'infos et des exemples ici : https://www.codesdope.com/java-use-of-this/

          -
          Edité par Nemo404 17 juillet 2019 à 10:12:03

          • Partager sur Facebook
          • Partager sur Twitter
            17 juillet 2019 à 15:54:30

            Merci Nemo04.

            Juste une question...

            dans :

            public Ville(){
            	    System.out.println("Création d'une ville !");          
            	    nomVille = "Inconnu";
            	    nomPays = "Inconnu";
            	    nbreHabitants = 0;
            	    this.setCategorie();
            	  }

            this fait référence à l'objet courant, ici quel est l'objet courant?

            • Partager sur Facebook
            • Partager sur Twitter
              17 juillet 2019 à 16:23:06

              Salut 

              Il n’y en a pas ici. Ce que tu montres c’est "l’usine" à objets ville. 

              Tu dois faire un truc comme :

              paris = new Ville()

              et paris.setCategorie fera ce que fait la méthode du même nom.

              • Partager sur Facebook
              • Partager sur Twitter
                17 juillet 2019 à 22:45:32

                Bonjour,

                Dans le constructeur, this représente l'objet qui est en train d'être créé.

                Dans une méthode, this représente l'objet sur lequel la méthode est appelée.

                Exemple :

                // On crée un objet. Dans le constructeur, this représente cet objet.
                Ville ville1 = new Ville("Lyon", 1000000, "France");
                // On crée un deuxième objet. Dans le constructeur, this représente cet objet.
                Ville ville2 = new Ville("Berlin", 6000000, "Allemagne");
                
                // Dans getNom, this représente l'objet référencé par ville1.
                System.out.println(ville1.getNom());
                
                // Dans getNom, this représente l'objet référencé par ville2.
                System.out.println(ville2.getNom());
                
                

                L'usage de this est facultatif sauf si une variable locale a le même nom qu'un attribut. En général, il vaut mieux ne pas nommer des variables locales nommées comme des attributs. Ca peut créer des bugs difficiles à trouer et corriger.

                • Partager sur Facebook
                • Partager sur Twitter
                  18 juillet 2019 à 21:02:03

                  Merci brubru777

                  En fait moi c'était à cause de this.setCatégorie que je comprenais plus le système du this. On peut même le supprimer, et en faisant des tests j'ai enfin compris que  qu'il faisait référence à l'objet courant, et comme j'avais du mal à comprendre le sens du terme "objet courant"... c'était compliqué.

                  Mais j'ai appris qu'il fallait bien connaître chaque terme et mot utilisé pour programmer. Chaque mot à un sens dans une explication.

                  Lol je sais c'est bête mais si quelqu'un tombe dessus et a le même probleme que moi, j'espère qu'il comprendra.

                  Merci à vous tous je comprends mieux.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  tuto java de cysboy... qui peut décrypter ce code?

                  × 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