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

avec Java Discussion :

Explication de code


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut Explication de code
    Bonjour,
    En vous remerciant d'avance j'aimerais qu'on m'explique en détail ce code concernant la classe Personne (surtout au niveau de la ligne 6, 7, 8 (explication en détail svp) 9 et 10

    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
     
    public class Personne
    {
      private String nom; // ligne 1
      private String prenom; // ligne 2
     
      private GregorianCalendar date_nais; // ligne 3
     
      public long calculAge() // ligne 4
      {
        long age; // ligne 5
     
        date_nais= new GregorianCalendar().getTimeInMillis()- // ligne 6
        date_nais.getTimeInMillis(); // ligne 7
     
        age=age/1000/60/60/24/365; // ligne 8
        return age; // ligne 9
     
      }
     
     
      public void affichage () // ligne 10
      {
        System.out.println("nom: " + nom); // ligne 11
        System.out.println("prénom: " +prenom); // ligne 12
        System.out.println("âge: " +calculAge() ) ;  // ligne 13
     
     
      }
     
    }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je veux bien, mais bosse un peu d'abord.

    Fais-nous une petite présentation de ce à quoi sert cette classe, et quelle à quoi sert manifestement la méthode constituée des lignes en question. En gros dis-nous "j'ai bien compris que cette méthode sert à <MACHIN> mais je ne comprends pas comment elle le fait, avec les lignes 6 à 8. Notamment, je n'ai jamais vu la classe <CLASSE>."
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    A priori:
    1/ Ce code ne compile même pas (ligne 6)
    2/ Il contient des erreurs de logiques ("age" est utilisé avant qu'une valeur ne lui soit affecté, une personne née en 2014 aura un âge de 2014 ans, ...)
    3/ Il contient un erreur de calcul pour la conversion millisecondes --> année (ligne 8)

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ah, oui. La ligne 6 devrait commencer par age= et la ligne 8 a oublié un /

    Mais bon, l'idée de la chose est évidente.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ah, oui. La ligne 6 devrait commencer par age= et la ligne 8 a oublié un /

    Mais bon, l'idée de la chose est évidente.
    oui je viens de modifier pour le / sinon le reste j'ai copié cash et collé le code comme indiqué dans le livre et le fichier source ^^

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Je veux bien, mais bosse un peu d'abord.

    Fais-nous une petite présentation de ce à quoi sert cette classe, et quelle à quoi sert manifestement la méthode constituée des lignes en question. En gros dis-nous "j'ai bien compris que cette méthode sert à <MACHIN> mais je ne comprends pas comment elle le fait, avec les lignes 6 à 8. Notamment, je n'ai jamais vu la classe <CLASSE>."

    Justement je suis entrain de bosser là dessus , je suis tout débutant et je lis le livre des éditions Eni (Java7 Les fondamentaux du langage Java).
    Sauf que j'ai eu ce code au chapitre 3 en début de la programmation objet ( j'en suis aux explications des concepts généraux) sans n'avoir encore débuté la partie objet pure (classes et méthodes java etc...).

    Par conséquent il y'a ce code pour montrer comment on construit des méthodes sauf que voilà la partie objet n'est pas entamée.
    Mais de ce que je comprends:

    on a déclaré une classe Personne et 2 variables de visibilité privées de type chaînes de caractère nommé nom et prenom et un une variable de modificateur privé aussi nommé GregorianCalendar (dont je pense que c'est un objet pour gérer les dates, ou je me trompe? )..

    Puis dans la fonction calculAge on a une variable de type long et la variable date-nais fait l'objet d'une allocation mémoire via une instanciation de la classe GregorianCalendar concaténée à la méthode getTimeInMillis (la ligne 7 et 8 je comprends pas, surtout la 8) et enfin on retourne le contenu de la variable age qui nous fait sortir de la méthode, et enfin on a une méthode void affichant le nom prénom et executant la procédure calculAge.

    Je reste à l'attente de vos directives et redressement (à la maison de correction) en vous remerciant d'avance

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ca, c'est pas prêt de compiler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     date_nais= new GregorianCalendar().getTimeInMillis()- // ligne 6
        date_nais.getTimeInMillis(); // ligne 7

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Ca, c'est pas prêt de compiler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     date_nais= new GregorianCalendar().getTimeInMillis()- // ligne 6
        date_nais.getTimeInMillis(); // ligne 7
    justement je trouve le tiret trop bizarre car de ce que j'ai lu des bases si c'est pour concaténer c'est un point qu'on aurait du utiliser et non un tiret, j'ai tort ou pas?

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Non, le problème n'est pas le tiret. Personne ne veut concaténer quoi que ce soit. La méthode s'appelle getAge() sur une classe qui contient la donnée date_naiss. Tu penses qu'elle essaie de faire quoi ? Non, ce n'est pas une concaténation -_-°.

    Le problème est que date_nais est une variable de type GregorianCalendar, donc autre chose qu'un nombre, et qu'on essaie de lui donner le résultat d'une soustraction : donc un nombre. Ça ne peut pas marcher. Il fallait que la ligne commence par age= et non pas date_nais=.
    Si c'est comme ça dans le livre eh bien il y a une erreur dans le livre. C'est difficile de patcher un livre.

    Citation Envoyé par omzoway7
    on a déclaré une classe Personne et 2 variables de visibilité privées de type chaînes de caractère nommé nom et prenom et un une variable de modificateur privé aussi nommé GregorianCalendar (dont je pense que c'est un objet pour gérer les dates, ou je me trompe? )..
    Bien. C'est tout à fait ça.


    Citation Envoyé par omzoway7
    Puis dans la fonction calculAge on a une variable de type long et la variable date-nais fait l'objet d'une allocation mémoire via une instanciation de la classe GregorianCalendar concaténée à la méthode getTimeInMillis (la ligne 7 et 8 je comprends pas, surtout la 8) et enfin on retourne le contenu de la variable age qui nous fait sortir de la méthode,
    Alors avant toute chose :
    - Commence par nous dire quel semble être le but de cette méthode calculAge(), n'hésite pas à t'aider en te servant de son nom. Puis dis-nous à partir de quoi pourrait-elle possiblement faire une chose pareille ? (Il y a grosso-modo deux choses essentielles à savoir pour faire ce qu'elle doit faire, quelles sont ces deux choses et, d'après toi, d'où peut-elle les trouver ?)

    Ensuite, par ordre d'importance :
    - La ligne 8 contient des / qui est le symbole typique de la division.
    - On ne concatène pas une classe et une méthode. Concaténer est un terme qui s'applique aux strings, à savoir, concaténer deux strings produit une troisième string qui est composée de la première suivie de la deuxième. Et en Java, ça se fait avec les symbole + qui bien sûr, ne fait concaténation que si au moins un des deux opérandes est une string.
    Il y a appel de la méthode getTimeInMillis() de la classe GregorianCalendar sur l'instance qui vient d'être créée.
    - Ça ne sert à rien de parler d'allocation mémoire. Quand on instancie on instancie, c'est une action en soi, bien sûr que la mémoire nécessaire est allouée ça va de soi, ce qui est important c'est l'instanciation.
    - Les lignes 6 et 7 n'étant pas séparées d'un ; tout se passe comme si elles étaient sur la même ligne (moins le // bien entendu.)

    Citation Envoyé par omzoway7
    et enfin on a une méthode void affichant le nom prénom et executant la procédure calculAge.
    Bien.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Non, le problème n'est pas le tiret. Personne ne veut concaténer quoi que ce soit. La méthode s'appelle getAge() sur une classe qui contient la donnée date_naiss. Tu penses qu'elle essaie de faire quoi ? Non, ce n'est pas une concaténation -_-°.


    Si c'est comme ça dans le livre eh bien il y a une erreur dans le livre. C'est difficile de patcher un livre.



    Bien. C'est tout à fait ça.




    Alors avant toute chose :
    - Commence par nous dire quel semble être le but de cette méthode calculAge(), n'hésite pas à t'aider en te servant de son nom. Puis dis-nous à partir de quoi pourrait-elle possiblement faire une chose pareille ? (Il y a grosso-modo deux choses essentielles à savoir pour faire ce qu'elle doit faire, quelles sont ces deux choses et, d'après toi, d'où peut-elle les trouver ?)

    Ensuite, par ordre d'importance :
    - La ligne 8 contient des / qui est le symbole typique de la division.
    - On ne concatène pas une classe et une méthode. Concaténer est un terme qui s'applique aux strings, à savoir, concaténer deux strings produit une troisième string qui est composée de la première suivie de la deuxième. Et en Java, ça se fait avec les symbole + qui bien sûr, ne fait concaténation que si au moins un des deux opérandes est une string.
    Il y a appel de la méthode getTimeInMillis() de la classe GregorianCalendar sur l'instance qui vient d'être créée.
    - Ça ne sert à rien de parler d'allocation mémoire. Quand on instancie on instancie, c'est une action en soi, bien sûr que la mémoire nécessaire est allouée ça va de soi, ce qui est important c'est l'instanciation.
    - Les lignes 6 et 7 n'étant pas séparées d'un ; tout se passe comme si elles étaient sur la même ligne (moins le // bien entendu.)



    Tout d'abord merci pour les réponses et indications:

    Ensuite désolé pour la mauvaise utilisation du terme "concaténer", je voulais surtout dire récupération ou accéder à une valeur d'une méthode d'une classe par le biais de la syntaxe pointée.

    Sinon oui tout à fait raison en effet ce n'est pas date_nais = mais plutôt age = mea-culpa, l'erreur vient intégralement de moi (même si j'ai lu beaucoup de livres de cette édition entre autres HTML5 et JS et j'avoue parfois y'a des erreurs de listing sur le livre (et non pas dans les fichiers de code source donnés), et dorénavant je copierai directement depuis les fichiers sources... ^^


    Sinon pour répondre à question je pense que la méthode calculAge() essaie de calculer l'âge de la personne depuis sa date de naissance qui est le 29 nov 1963 et retourne ensuite que l'âge de la personne en question [ si je peux avoir plus de précision sur la ligne 8 surtout pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    age=age/1000/60/60/24/365;
    à quoi ça sert les chiffres entre les / et à quoi sert la méthode getTimeInMillis de la classe GregorianCalendar (récupérer la date actuelle? et la sustraire de la date de naissance saie au préalable? ) ]


    Merci encore

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par omzoway7 Voir le message
    justement je trouve le tiret trop bizarre car de ce que j'ai lu des bases si c'est pour concaténer c'est un point qu'on aurait du utiliser et non un tiret, j'ai tort ou pas?
    Complètement: le - étonnament c'est.... pour faire la soustraction. Pour information, le + sert à additionner, le / à diviser et le * à multiplier.

    Le point ne sert pas à faire de la concaténation, nous ne sommes pas en php. Pour concaténer deux string, on utilise le + en java (le seul cas à un opérateur est surchargé en java d'ailleurs). Le point sert à accéder à un champ ou une méthode d'une instance ou d'une classe particulière, ou d'accéder au contenu d'un package:

    System.out.println -> méthode "println" dans l'instance de PrintStream stockée dans le champ statique "out" sur la classe java.lang.System
    java.lang.System -> Classe "System" dans le package "lang", dans le package "java"

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Complètement: le - étonnament c'est.... pour faire la soustraction. Pour information, le + sert à additionner, le / à diviser et le * à multiplier.

    Le point ne sert pas à faire de la concaténation, nous ne sommes pas en php. Pour concaténer deux string, on utilise le + en java (le seul cas à un opérateur est surchargé en java d'ailleurs). Le point sert à accéder à un champ ou une méthode d'une instance ou d'une classe particulière, ou d'accéder au contenu d'un package:

    System.out.println -> méthode "println" dans l'instance de PrintStream stockée dans le champ statique "out" sur la classe java.lang.System
    java.lang.System -> Classe "System" dans le package "lang", dans le package "java"

    Merci encore pour les précisions

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Explication de code
    Par sacco dans le forum C
    Réponses: 2
    Dernier message: 12/04/2006, 23h13
  2. Explication de code
    Par claralavraie dans le forum Linux
    Réponses: 1
    Dernier message: 20/03/2006, 09h58
  3. Shell - Explication de code
    Par claralavraie dans le forum Linux
    Réponses: 13
    Dernier message: 13/01/2006, 16h03
  4. Explication de code - RE
    Par deedoo dans le forum Général Python
    Réponses: 23
    Dernier message: 29/07/2005, 14h00
  5. Explication de code simple
    Par Clad3 dans le forum OpenGL
    Réponses: 3
    Dernier message: 20/03/2005, 11h31

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