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 :

[Debutant]Changement de valeur pour un integer en parametre de fonction


Sujet :

avec Java

  1. #1
    Nouveau membre du Club Avatar de Warz
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 48
    Points : 38
    Points
    38
    Par défaut [Debutant]Changement de valeur pour un integer en parametre de fonction
    Bonjour à tous,

    Petit exemple pour mon problème :

    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
     
    public class ValeurParReference {
     
    	/**
             * <p>
             * Méthode principale
             * </p>
             * @param args
             */
    	public static void main(String[] args) {
    		Integer value = new Integer(0);
    		boolean result = testIntegerChange(true, value);
    		System.out.println(String.valueOf(result) + " " + value);
    	}
     
    	/**
             * <p>
             * Test changement de valeur d'un Integer
             * </p>
             * @param test
             * @param value
             * @return
             */
    	public static boolean testIntegerChange(boolean test, Integer value) {
    		if (test) {
    			value = new Integer(3);
    			return true;
    		} else {
    			value = new Integer(6);
    			return false;
    		}
    	}
     
    }
    Et comme j'ai pu m'en rendre compte (dans la lune moi en ce moment) le println me donne "true 0".

    Ce qui est normal vu que je change la valeur dans la fonction en créant un nouvel objet Integer donc les références ne sont plus les mêmes et je garde ma valeur initial de 0 plutôt que 3.

    Avec un String c'est pareil, le mieux étant je pense (je test tout de suite) d'utiliser un StringBuffer, faire un clear sur son contenu et mettre ma nouvelle valeur dedans.

    Mais cette solution ne me plaît pas : comment faut-il faire pour changer ma valeur d'Integer ? Ai-je oublié quelque chose ?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Essaye ceci pour voir :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static boolean testIntegerChange(boolean test, Integer value) {
    		if (test) {
    			value = Integer.getInteger("3");
    			return true;
    		} else {
    			value = Integer.getInteger("6");
    			return false;
    		}
    	}
    Plus d'explications dans les cours et tutoriels Java : http://java.developpez.com/cours/
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  3. #3
    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
    Ce que je comprends pas est que le retour de ta méthode testIntegerChange retourne la meme valeur que le booleen en premier argument.
    Si la méthode retourner un objet de type Integer, je pense que cela résoudrai ton problème.

  4. #4
    Nouveau membre du Club Avatar de Warz
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 48
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par maxf1
    Essaye ceci pour voir :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static boolean testIntegerChange(boolean test, Integer value) {
    		if (test) {
    			value = Integer.getInteger("3");
    			return true;
    		} else {
    			value = Integer.getInteger("6");
    			return false;
    		}
    	}
    Non plus ! J'avais essayé aussi mais cette méthode renvoie aussi une nouvelle référence.

    @billynirvana : Ma méthode problématique est bien plus complexe que l'exemple ci_dessus, j'ai voulu faire simple et synthétiser au mieux ma question.

    Ma méthode utilisée renvoie un booléen important mais une des finalité de la méthode est de ma changer la valeur d'un integer. Les 2 ne sont pas liés.

  5. #5
    Nouveau membre du Club Avatar de Warz
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 48
    Points : 38
    Points
    38
    Par défaut
    Et le StringBuffer qui va bien mais que je n'aime pas :

    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
     
    	/**
             * <p>
             * Test changement de valeur d'un Integer
             * </p>
             * @param test
             * @param value
             * @return
             */
    	public static boolean testStringBufferChange(boolean test, StringBuffer value) {
    		if (test) {
    			value.delete(0, value.length());
    			value.append("3");
    			return true;
    		} else {
    			value.delete(0, value.length());
    			value.append("6");
    			return false;
    		}
    	}

  6. #6
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Si tu méttais ta variable en variable de classe et nom de methode cela résoudrait le probleme très rapidement,
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  7. #7
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Et un effet de bord, un !

    Citation Envoyé par fr.wikipedia.org
    En informatique, une fonction est dite à effet de bord si elle modifie un état autre que sa valeur de retour.
    [...]
    Ne pas avoir d'effet de bord est nécessaire mais non suffisant pour la référence transparentielle. Celle-ci signifie qu'une expression (telle qu'un appel de fonction) peut être remplacée par sa valeur sans affecter le comportement du programme. Cela requiert que l'expression n'a pas d'effet de bord et qu'elle est une fonction pure, c'est-à dire qu'elle retourne toujours la même valeur sur les mêmes entrées.
    Ne JAMAIS utiliser une pareille fonction : le "rôle" d'une fonction se limite à renvoyer un résultat (pas en supplément de modifier l'état d'un de ses paramètres) !
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  8. #8
    Nouveau membre du Club Avatar de Warz
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 48
    Points : 38
    Points
    38
    Par défaut
    Bien bien, le tag résolu me paraît bien aller à ce problème.
    Plus d'effet de bord !

  9. #9
    Membre actif Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 239
    Points
    239
    Par défaut
    Salut,

    Pour info, les Objets String, Integer, Short, Long, ... sont immuables, c'est à dire que l'on ne peut pas changer leur état.

    A+
    Hydraland

  10. #10
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par Warz
    Bien bien, le tag résolu me paraît bien aller à ce problème.
    Tout à fait d'accord !
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

Discussions similaires

  1. [DEBUTANT] changement de source pour un object pdf
    Par xavDIP dans le forum ASP.NET
    Réponses: 0
    Dernier message: 02/04/2009, 10h10
  2. Changement de Style pour une valeure Précise
    Par Martony74 dans le forum Langage
    Réponses: 9
    Dernier message: 23/10/2008, 15h45
  3. plusieurs valeurs pour un champ ? -- debutant
    Par copeau31 dans le forum Débuter
    Réponses: 8
    Dernier message: 03/10/2007, 22h27
  4. Réponses: 8
    Dernier message: 29/03/2007, 14h48
  5. Réponses: 10
    Dernier message: 07/08/2006, 12h02

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