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

Langage Java Discussion :

[Débutant]Appel d'une méthode


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut [Débutant]Appel d'une méthode
    Bonjour à tous

    J'ai commencé depuis peu la POO. Je dois dire que je me casse la tête un peu dessus... Le concept n'est pas vraiment difficile, mais je sais pas ... j'ai un peu de mal J'ai cherché sur le net dans mes bouquins, mais les exemple mentionné ne sont pas très parlant...(pour moi en tout cas)

    Ma question est la suivante. D'après un exercice d'un de mes profs qui est très basique qui dis : Routerner la valeur ASCII d'un caractère passé en paramètre
    Voici ce que je nous ai pondu :
    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
    public class Tata{
     
      public static void main (String [] args){
     
        valeurASCII();
     
        }
     
        private static int valeurASCII (int i){
            char a;
            a = 'A';
            i = (int) a;
           System.out.println("Conversion : " + i);
            return i ;
          } 
      }
    Je fais un simple cast d'un char en int pour avoir mon résultat. Ce que je ne comprend pas c'est pourquoi j'ai une erreur de compilation. Pourtant j'appel bien ma méthode valeurASCII(); comme il faut, ou en tout cas comme c'est expliqué dans mon cours. Par contre, il suffit que je mette valeurASCII(0); pour que cela me retourne la valeur attendu.
    Je tiens à dire que le zéro dans valeurASCII(0); j'aurais pu le remplacer par n'importe quel chiffre... Je dois dire que cela fais au moin 3 semaine que je sèche dessus. Je sais que c'est bête mais je n'arrive plus à avancer dans mon cours juste à cause de ça!!

    Merci beaucoup pour votre aide

  2. #2
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Ben c'est normal, si tu définis une méthode ayant un paramètre, tu dois fournir le paramètre lors de l'appel.
    A part ça ,je trouve que ton code est un peu tordu :
    • pourquoi définir une méthode dans le main ?
    • pourquoi la méthode en question ne prend pas en paramètre un char plutôt qu'int si c'est pour la conversion en code ASCII?


    Voici un code qui m'a l'air plus approprié pour un débutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class ValeurAscii {
     
        public static void main(String[] args) {
            char[] caracteres=args[0].toCharArray();
            char caractere=caracteres[0];
            System.out.println((int)caractere);
        }
     
     
     
    }
    Tu peux lancer ce programme avec :
    Le choix du caractère 'a' est totalement arbitraire, tu peux le remplacer par le caractère que tu veux.

    En espèrant t'avoir aidé .


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  3. #3
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Salut afrikha et merci beaucoup pour ta réponse

    Oui comme tu fais ça marche aussi. Mais le but de l'excercice était enfait, de créer une méthode d'y passer un paramètre ensuite de l'appeler dans la main.

    Tu as raison sur le fait que je n'ai pas bien lu l'énoncé du problème. J'aurais du plutôt créer une méthode qui prend en paramètre un char et qui le cast ensuite en int pour ensuite retourner le résultat. Mais n'ayant pas réussi à le faire comme cela je me suis rabattu sur la première chose qui marchait, enfin ... si on peut appeler ça marcher.

    Quand tu me dis pourquoi définir une méthode dans le main ?
    Bah je ne la définit pas dans le main je l'appel dans le main enfin c'est ce qui est marqué dans mon cours pour appeler une méthode. Me trompe-je?

    En tout cas merci pour ta réponse qui est très bonne aussi.

  4. #4
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Je parlais de quelque chose qui ressemble plutôt à ça :

    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
     
    public class Tata{   
     
    private static int valeurASCII (char a){
      int i; 
      i = (int) a; 
      return i ;
     }
     
     
    public static void main (String [] args){   
     
       System.out.println("Conversion : " +valeurASCII('a'));
     
    }


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  5. #5
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Salut afrikha,

    Après avoir passé toute la nuit à essaier de comprendre... (j'ai bien dit essaier)

    Voilà ce que je nous ai pondu d'après ton exemple. J'ai viré le paramètre de la méthode pour pouvoir l'invoquer juste par son nom valeurASCII();
    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
    public class Tata{
     
      private static int valeurASCII (){
          char a = 'A';
          int i; 
          i = (int) a; 
          System.out.println(i);
          return i;
      }
     
     
      public static void main (String [] args){   
     
          valeurASCII();
     
      }
     
    }
    Tu me diras cela ne sert à rien, c'est vrai, mais c'est juste pour ma compréhension.

    Maintenant est-il possible de passer un paramètre à ma méthode valeurASCII, comme ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private static int valeurASCII (char a){ ... }
      public static void main (String [] args){   
     
          valeurASCII();
     
      }
    mais que, quand je l'appel dans la main je ne lui passe aucun paramètre?

    ça commence à ressembler un peu à un gros n'importe quoi. Mais comme le dis le proverbe : Pose une question et tu risques d'être bête 5 minute, ne pas la poser c'est risquer de l'être toute la vie

    Merci pour ta patience

  6. #6
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Par défaut
    Salut,

    es-tu sûr que c'est un méthode que tu veux ?

    Ce serai pas ça (c'est-à-dire en métant le mot clef "void" au lieu de "int", afin de faire comprendre que c'est une fonction):
    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
     
    public class Tata{
     
      private static void valeurASCII (){
          char a = 'A';
          int i; 
          i = (int) a; 
          System.out.println(i);
      }
     
     
      public static void main (String [] args){   
     
          valeurASCII();
     
      }

  7. #7
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Merci Michaeljackfan pour ta participation,

    Cela m'a permis de relire un chapitre d'un de mes nombreux livres sur java. Et je peux dire que grâce à toi je comprend plus rien

    Voilà une définition que je trouve dans mon livre : Dans le langage Java, les algorithmes paramétrés s'appellent des fonctions ou encore des méthodes

    Au moin ça a le mérite d'être claire... donc fonction et méthodes c'est la même chose, enfin d'après ce qui est écrit. Mais alors les procédures ...?

    Là ou je ne suis pas d'accord avec toi Michaeljackfan, c'est qu'en mettant private static void valeurASCII () la fonction ou méthode(enfin comme tu veux) n'est pas censé retourner de résultat, alors que dans mon exemple, elle en retourne un.

    C'est super cool je commence à y voir plus claire ou peut-être pas

    Merci pour votre aide et patience.

  8. #8
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Par défaut
    Et bien une méthode effectue un calcul puis retourne une valeure. Donc tu appels une méthode à la même place que tu mettrais une variable (plus ou moins), sauf que cette variable effectue une opération.
    comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class air{
      public static int air(int largeur, int hauteur){
        return (largeur*hauteur)//il calcul l'air puis retourne le résultat
      }
     
      public static void main(String[]args){
        System.out.println("l'air d'un réctangle de 5m * 6m="+air(5,6)+"m");//Il lit "air(5,6)", puis remplace ça par la valeur que retournera cette méthode
      }
    }

    Alors qu'une fonction n'est pas pareil, elle ne te renvoie pas de valeur, elle effectue quelque chose
    comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class air{
      public static void afficherAir(int largeur, int hauteur){
        System.out.println("l'air d'un réctangle de "+largeur+"m * "+hauteur+"m="+(largeur*hauteur)+"m");//il fait ce qu'on lui a demandé avec les paramètres passés (ou sans paramètres c'est possible aussi), mais ne retourne rien.
      }
     
      public static void main(String[]args){
        afficherAir(5,6);//il demande d'executer la fonction "afficherAir", mais n'attends rien en retour.
      }
    }
    Et bien que tous les deux soient des algorithmes paramétrés (mais tous deux peuvent ne pas prendre de paramètre) et qu'ils effectuent tous les deux les calculs, une méthode est destinée à ce que l'on utilise ce qu'elle renvoie, alors qu'une fonction effectue le code qu'elle contient sans rien renvoyer.

    Voilà, je sais pas si c'est très clair ?

  9. #9
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Bonjour à tous et bonne fête,

    J'ai enfin réussi à comprendre... 10 jours plus tard
    Enfait je ne comprennais pas les paramètre et à quoi il servait, c'est pour ça que j'avais un peu de mal.

    Donc ma méthode valeurASCII prend un char en paramètre et nous renvoie un int. Mais moi ce que je voulais par pure caprice c'était d'appeler ma méthode juste en faisant valeurASCII();. Malheureusement j'oubliais qu'il fallait passé un paramètre C'est pour ça que j'ai fais un gros n'importe quoi.

    Donc pour finir j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Tata{
     
        public static void main (String [] args){ 
          //Ce que j'oubliais de faire c'était de mettre mon caractère à convertir
          valeurASCII('A'); 
     } 
        private static int valeurASCII (char x){
        int i = (int) x; 
        System.out.println("Conversion : " + i); 
        return i ; 
     } 
    }
    Et voilà youpi je suis super content!!! Merci à tous pour votre aide!!!!

  10. #10
    Membre chevronné Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Par défaut
    euh non c'est pas bon cà

    ta méthode renvois un int
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static int valeurASCII (char x)
    et lorsque tu l'appel tu ne récupère pas le retour
    si tu veux l'appelr ainsi, la signature de ta méthode doit etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static void valeurASCII (char x)
    et dans le corps tu enlève le return

    Par contre si tu veux garder cette signature de méthode tu dois l'appelr ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int val = valeurASCII('A');
    Et dans ce dernier cas, tu n'est pas obligé de mettre le system.out.println(""); dans ta méthode, mais l'appeler dans le main avec la valeur que tu as récupéré, ou plus directement ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static void main (String [] args){ 
          //Ce que j'oubliais de faire c'était de mettre mon caractère à convertir
          System.out.println("Valeur ASSCI : " + valeurASCII('A')); 
     }
    voilà si tu reprend la dénomination en terme Algo
    dès que tu retourne une valeur c'est une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private int xxxxx() { return x; }
    Sinon si tu ne retourne rien, donc lorsque tu déclare ta méthode ca fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void xxxxxx() {....}
    c'est une procédure

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/03/2009, 16h17
  2. Réponses: 2
    Dernier message: 04/06/2006, 18h53
  3. Réponses: 2
    Dernier message: 06/12/2005, 09h41
  4. Réponses: 6
    Dernier message: 27/05/2005, 15h43
  5. Comment connaitre l'appelant d'une méthode
    Par Alec6 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 12/07/2004, 14h51

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