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 :

Récupérer la valeur de retour d'une méthode


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Récupérer la valeur de retour d'une méthode
    Bonjour

    Le prof nous a demande de réaliser ce Tp (qui est tres simple normalement)

    pour apprendre le concept orienté Objet , mais j'ai pas arriver a résoudre le problème

    Il nous a demander de réaliser deux classes (Main , Rectangle)

    la classe Rectangle contient la methode Surface et SetLongeur,SetLargeur

    il faut trouver a La classe Main : Rectangle R = new Rectangle (,,,) et il rentre la longeur et largeur pour avoir La surface

    Remarque : On ne doit pas récupérer la longueur et largeur avec la méthode scanner et JOptionPanel , il faut juste le déclarer directement .

    et finalement voici mon Travail

    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
    package Calc;
     
     
    import java.io.OutputStreamWriter;
     
    public class Main {
     
     
     
    	/**
             * @param args
             */
     
     
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		{
     
    			Rectangle  R = new Rectangle() ;
     
    			 System.out.println( R.surface(2,4, Surf ));
    		}
     
     
     
    	}
    	}
    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
    package Calc;
     
    import java.math.*;
     
    public class Rectangle {
     
    	public String Largeur;
    	public String Longeur;
    	public String Surface;
    	//public int Surf ;
     
     
    	public void surface(int SetLargeur , int SetLongeur , int Surf  )
    	{
    		 Surf = (SetLargeur * SetLongeur) ;
    	}
     
    	public void  SetLargeur(String Lar)
    	{
    	Lar = Largeur ;
    	}
     
    	public void  SetLongeur(String Lon)
    	{
         Lon = Longeur ;
    	}
    }
    et Merci d'avance

  2. #2
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Ta méthode surface ne doit pas contenir d'arguments et doit retourner un int. Tu dois utiliser les setter setLongueur et setLargeur pour définir les propriétés longueur et largueur de ta classe Rectangle qui doivent être des int et non des String.

    Ta méthode main devrait ressembler à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static void main(String[] args) {
    	Rectangle rectangle = new Rectangle();
    	rectangle.setLargeur(2);
    	rectangle.setLongueur(4);
    	int surface = rectangle.surface();
    	System.out.println(surface);
    }
    Je te laisse corriger ta classe Rectangle!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    Salut,

    tu n'es pas très loin du résultat, mais en effet il y a un soucis avec ta méthode surface().

    Voilà une correction possible :
    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
    package Calc;
     
     
    import java.io.OutputStreamWriter;
     
    public class Main {
     	/**
             * @param args
             */
    	public static void main(String[] args) {
    		Rectangle  r = new Rectangle() ;
    		r.setLargeur(2);
    		r.setLongueur(4);
     
    		System.out.println( r.surface());
    	}
    }
    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
    package Calc;
     
    import java.math.*;
     
    public class Rectangle {
    	// Attributs
    	private int largeur;
    	private int longeur;
     
    	// Setters
    	public void setLargeur(int largeur)
    	{
    		this.largeur = largeur ;
    	}
     
    	public void setLongeur(int longueur)
    	{
    		this.longueur = longueur ;
    	}
     
    	// Getters
    	public int getSurface()
    	{
    		return (largeur * longueur) ;
    	}
     
    }
    Penses aussi à respecter la casse dans les variables et les méthodes.
    Ce n'est pas obligatoire, ca n'empêche pas le programme de fonctionner, mais c'est vivement conseiller pour faciliter la lecture à d'autres personnes.


    Edit : erf... trop lent

  4. #4
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    Le problème viens de la déclaration de ton type de retour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void surface(int SetLargeur , int SetLongeur , int Surf  )
    	{
    		 Surf = (SetLargeur * SetLongeur) ;
    	}
    En fait le void signifie que ta fonction ne doit renvoyer aucune valeur de sortie. Or ce que tu souhaite ici est qu'elle te retourne la valeur de la surface.

    Ici il semble adéquate de retourner cette valeur sous forme de "int".

    le corps de ta méthode va donc devenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public int surface(int SetLargeur , int SetLongeur , int Surf  )
    	{
    		 Surf = (SetLargeur * SetLongeur) ;
    	}
    Ensuite, il ne faut pas passer de variable dans ton main comme tu le fais pour "surf". En plus de ne pas être initialisée, elle ne présente aucun intérêt.

    Pour indiquer à ta fonction ce qu'elle doit retourner, on utilise le mot clé "return". Ta fonction devient donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public int surface(int SetLargeur , int SetLongeur)
    	{
    		 return (SetLargeur * SetLongeur) ;
    	}
    En combinant cela avec ce qui vient d'être dit, tu auras quelque chose de parfait

    EDIT : et puis erf trop lent aussi
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Salut,

    Pour qu'une méthode retourne quelque chose il ne faut pas qu'elle soit void.

    C'est la méthode surface de la classe Rectangle qui calculera et retournera la surface d'un rectangle.

    Pour qu'elle puisse calculer cette surface on doit lui fournir la largeur et la longueur du rectangle, mais pas la surface puisque c'est elle qui la calculera.

    Et pour qu'elle puisse retourner la surface, il faut remplacer void par le type de la valeur à retourner après le calcul.

    On n'a besoin de rien d'autre.

    Penser à respecter les conventions de "nommage" des noms des variables:
    Ces noms doivent commencer par une minuscule...

    Il reste à voir comment fournir la largeur et la longueur à la méthode surface:

    Cela se passe dans la méthode main(... de ta classe Main et il faut non seulement créer l'objet de la classe Rectangle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rectangle  r = new Rectangle();
    mais aussi, il faut récupérer la surface en fournissant la largeur et la longueur du rectangle à la méthode surface de la classe Rectangle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int surface = r.surface(2,4);
    Je te laisse le soin de modifier et compiler tes 2 classes en fonction de ces indications, puis d'exécuter la classe Main.

    Cordialement,

    Dan

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Merci
    Merci pour tous

    et surtout que j'arrive a comprendre bien le role es methodes

    Vraiment je suis tres heureus pour cette premier participation

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    re-bonjour,

    j'avoue ne pas être trop d'accord avec les 2 dernières solutions proposées, à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Rectangle  r = new Rectangle();
    int surface = r.surface(2,4);
    Ici on passe complètement outre les attributs de l'objet Rectangle.
    Dans ce cas là, autant faire une méthode surface() static si vous désirez mettre la largeur et la longueur en paramètre de la méthode.

    Vu l'ennoncé de lyes_djaml, je pense qu'il vaut mieux utiliser les setters (ou un constructeur paramétré) puis une méthode surface() sans paramètres.

    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
     
    Rectangle  r = new Rectangle();
    r.setLargeur(2);
    r.setLongueur(4);
     
    int surface = r.surface();
     
    // ou
    Rectangle  r = new Rectangle(2, 4);
     
    int surface = r.surface();
     
    // ou encore
    Rectangle  r = new Rectangle();
    r.setSize(2, 4);
     
    int surface = r.surface();

  8. #8
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    Nous sommes d'accord, ce serait beaucoup mieux en effet.
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    et maintenant ou est le probleme , parce que il me rendre 0 comme resultat

    j'ai compris que il ne recupe pas les chiffres (2)(4) , mais Pourquoi ?

    ce qu'il m'interaisse c'est d'apprendre le concept plus que Resultat

    Desole
    Fichiers attachés Fichiers attachés

  10. #10
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    [QUOTE=Caalador;5726771]re-bonjour,

    Ici on passe complètement outre les attributs de l'objet Rectangle.
    Dans ce cas là, autant faire une méthode surface() static si vous désirez mettre la largeur et la longueur en paramètre de la méthode.

    Vu l'ennoncé de lyes_djaml, je pense qu'il vaut mieux utiliser les setters (ou un constructeur paramétré) puis une méthode surface() sans paramètres.

    [code]

    Exactement c'est juste ce que je suis entrain de chercher et de comprendre

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    Préfère le code entre balise que les fichiers liés, c'est plus pratique pour nous pauvres lecteurs du forum.

    Dans ton code, le problème vient de ton main, et plus particulièrement de :
    Ici tu questionnes l'attribut Surface au lieu d'appeler ta méthode.
    Pour rappel, une méthode se termine toujours par des parenthèses (vides ou avec des paramètres).

    Ta class Rectangle représente un object Rectangle.
    Cet objet a 2 attributs : une longueur et une largeur
    La surface n'est pas un attribut à proprement parlé, c'est un rapport entre la largeur et la longueur.
    Voilà pourquoi ton code doit commencer comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Rectangle {	
    	private int largeur;
    	private int longeur;
    	// public String Surface; // ne pas mettre cet attribut
     ... ...
    Ensuite, il faut donner la possibilité aux utilisateurs de ta class de créer une instance de cette Object.
    On rajoute donc un constructeur du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Rectangle(){
        largeur = 0;
        longueur = 0;
    }
    Tu peux aussi donner la possibilité aux utilisateurs de créer un Rectangle pré-paramétré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public Rectangle(int largeur, int longueur){
        // pour le this qui va suivre, entend par là :
        // dans l'attribut largeur de mon instance (this), je stock (=) la valeur de la variable largeur donnée en paramètre
        this.largeur = largeur;
        this.longueur = longueur;
    }
    Afin de pouvoir modifier les attributs on ajoute ensuite les setters :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void setLargeur(int largeur){
        this.largeur = largeur;
    }
     
    public void setLongueur(int longueur){
        this.longueur = longueur;
    }
    Souvent on rajoute aussi les getters afin de pouvoir questionner un objet sur l'état de ses attributs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public int getLargeur(){
        return largeur;
    }
     
    public int getLongueur(){
        return longueur;
    }
    Et enfin on ajoute diverses méthodes additionnelles tel que la récupération de la surface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int getSurface(){
        return largeur*longueur;
    }

  12. #12
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    Bon, grillé de 2 minutes pendant que je mettais en forme sous eclipse... Maintenant que c'est fait, autant le poster, mais ca rejoins ce que vient de faire Caalador, en respectant les conventions usuelles.

    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
     
    package calc;
     
    public class Main {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		{
    		     //Première méthode avec le constructeur par défaut :
    			 Rectangle  R1 = new Rectangle() ;
     
    			 R1.setLargeur(2);
    			 R1.setLongeur(2);
    			 System.out.println("la surface du rectangle est: "+R1.surface());
     
    			 //Deuxième méthode en passant par la constructeur valué :
    			 Rectangle R2 = new Rectangle(2,2);
    			 System.out.println("la surface du rectangle est: "+R2.surface());
    		}			
    	}
    }
    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
    32
    33
    34
    35
    36
     
    package calc;
     
    public class Rectangle {
     
    	public int largeur;
    	public int longueur;
     
    	public Rectangle()
    	{
    		//Pas obligatoire mais je n'aime pas avoir de variables non initialisées.
    		this.largeur = 0;
    		this.longueur = 0;
    	}
     
    	public Rectangle(int largeur, int longueur)
    	{
    		this.largeur = largeur;
    		this.longueur = longueur;
    	}
     
    	public int surface()
    	{
    		 return (this.largeur*this.longueur) ;
    	}
     
    	public void setLargeur(int largeur)
    	{
    		this.largeur = largeur;
    	}
     
    	public void  setLongeur(int longueur)
    	{
    		this.longueur = longueur;
    	}
    }
    Donc pense à bien te rappeler que :

    Ce qui commence par une majuscule :
    - Noms de classes
    - Noms de constructeurs (forcément)

    Entierement en majuscule :
    - Variables STATIQUES

    Tout le reste est en minuscule :
    - variables non statiques
    - noms des méthodes
    - nom du package
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  13. #13
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci our tous

    le probleme est resolu et l'important ce qu'est j'ai compris bien le principe

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/01/2009, 12h12
  2. Réponses: 5
    Dernier message: 14/06/2008, 14h30
  3. Récupérer la valeur de retour d'une autre application
    Par neupont dans le forum VBScript
    Réponses: 5
    Dernier message: 11/03/2008, 11h55
  4. [2000] Récupérer la valeur de retour d'une procédure stockée
    Par drinkmilk dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 25/08/2006, 10h46
  5. Question très bête : récupérer la valeur de retour d'une fct
    Par pekka77 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/10/2005, 18h57

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