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 :

modifier un Double par référence


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut modifier un Double par référence
    Bonjour,
    j'ai une méthode qui me retourne déjà un objet et je souhaite à l'intérieur de cette méthode modifier un Double que je passe en argument :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MonObjet méthode(Double valeurAModifier){
    //beaucoup de blabla qui concerne MonObjet
    valeurAModifier = 5
    return new MonObjet(blabla)
    		}
    Malheureusement le Double n'est pas modifié.. Comment faire ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 239
    Par défaut
    Citation Envoyé par oc_alex86
    Bonjour,
    j'ai une méthode qui me retourne déjà un objet et je souhaite à l'intérieur de cette méthode modifier un Double que je passe en argument :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MonObjet méthode(Double valeurAModifier){
    //beaucoup de blabla qui concerne MonObjet
    valeurAModifier = 5
    return new MonObjet(blabla)
            }
    Malheureusement le Double n'est pas modifié.. Comment faire ?
    Salut,

    Si tu execute le code suivant (avec JUnit)

    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 DoubleTest extends TestCase {
     
        public void test_reference() throws Exception {
            Double zeDouble = new Double(2);
            Integer entier = meth(zeDouble);
            assertEquals(5, zeDouble.intValue());
            assertEquals(1, entier.intValue());
        }
     
        private Integer meth(Double mydouble) {
            mydouble = new Double(5);
            return new Integer(1);
        }
     
    }
    La première assertion plantera. le resultat obtenu de zeDouble.intValue() sera 2 au lieu des 5 attendu.

    En java, lors d'un passage en paramètre d'un objet dans une méthode on peut modifier ses propriétés internes mais pas sa référence. Tu peux donc passer par un objet intermédiaire genre MonCalcul et faire de la façon suivante :

    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
     
    public class DoubleTest extends TestCase {
     
        public void test_reference() throws Exception {
            MonCalcul monCalcul = new MonCalcul(2);
            Integer entier = meth(monCalcul);
            assertEquals(5, monCalcul.getMyDouble().intValue());
            assertEquals(1, entier.intValue());
        }
     
     
        private Integer meth(MonCalcul monCalcul) {
            monCalcul.setMyDouble(new Double(5));
            return new Integer(1);
        }
     
     
        private class MonCalcul {
     
            private Double mydouble;
     
            MonCalcul(double primitiveDouble) {
                mydouble = new Double(primitiveDouble);
            }
     
     
            Double getMyDouble() {
                return mydouble;
            }
     
     
            void setMyDouble(Double newDouble) {
                this.mydouble = newDouble;
            }
        }
    }
    Là, le code marchera

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Par défaut
    ou alors autre methode, probablement moins elegante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    public method modif(){
    double[] aValeur={2}
    maMethod(aValeur);
    System.out.println("nouvelle valeur = " + aValeur[0]);
    }
     
    public void maMethod(double[] valeurAmodifier){
      valeurAmodifier[0] = 5;
    }

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Tu ne peux pas modifier la valeur d'un objet Double. Sa valeur est fixée une fois pour toute à la création de l'objet.

    Ce que tu peux faire, c'est remplacer ce Double par une nouvelle instance ayant une valeur différente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Double a = new Double(0);
     
    public void changeValeur(double valeur) {
       this.a = new Double(valeur);
    }
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    Merci pour vos réponses.
    J'ai résolu le problème très simplement, en créant un objet générique pair<F,S>
    qui me permet de renvoyer une pair d'objets

  6. #6
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    Tu peux modifier un objet Double, mais pas s'il est passé en paramètre d'une méthode.

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

Discussions similaires

  1. Modifier un objet par sa référence
    Par Bubblegum dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 02/02/2011, 12h53
  2. [POO] Modifier attributs d'un objet par référence
    Par justSam dans le forum Langage
    Réponses: 8
    Dernier message: 22/02/2007, 07h58
  3. [BP]Borland Pascal : modifier les couleurs par défaut.
    Par Pipoland dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 12/10/2004, 21h32
  4. division de "double" par "0"
    Par ickis dans le forum C
    Réponses: 14
    Dernier message: 31/08/2003, 19h09
  5. Passage d'un tableau par référence?
    Par sebduth dans le forum C
    Réponses: 9
    Dernier message: 16/07/2003, 18h32

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