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 :

Echange de deux variables de type int


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Echange de deux variables de type int
    bonjour,
    il parait que les variables de type primitifs sont passés par valeur et non référence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int a,b
     
    public void echange (a,b)
    {
    int c;
    c=a;
    a=b;
    b=c;
    }
    ne fonctionne pas car les primitifs sont passés par valeur
    comment y remédier

    merci beaucoup

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Ca dépend ce que tu veux faire... Actuellement, tu as deux variable protégées (a et b) et une méthode qui a deux paramètres qui s'appellent pareil.

    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
    37
    38
     
    int a = 1;
    int b =2;
     
    public void echange (int a, int b) {
       int c;
       c=a;
       a=b;
       b=c;
    }
     
    public void echange () {
       int c;
       c=a;
       a=b;
       b=c;
    }
     
    public void testEchange(){
       System.out.println(a); //affiche 1
       System.out.println(b); //affiche 2
       echange(a, b);
       System.out.println(a); //affiche toujours 1
       System.out.println(b); //affiche toujours 2
       echange();
       System.out.println(a); //affiche 2
       System.out.println(b); //affiche 1
    }
     
    public void test(){
       int a = 2;
       int b = 3;
       System.out.println(a+b); //affiche 5
    }
     
    public void test2(){
       System.out.println(a+b); //affiche 3
    }

    Ton problème n'est pas le passage pas référence ou par valeur, c'est ce qu'on appelle du name shadow : tu as des variable qui ont le même nom que des variables interne de ta classe : tes variables locales priment.
    Je ne suis pas mort, j'ai du travail !

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Ben si, son problème est aussi lié au passage par valeur, sa fonction ne sert strictement à rien en l'état puisque tu appelles la fonction en lui passant 2 valeurs et que tu ne récupérera rien en retour (mais tu auras toujours tes attributs d'appel a et b dans l'état où ils étaient avant l'appel)

    Tu veux juste permuter les 2 valeurs ? Tu peux passer par un objet qui encapsule tes valeurs et faire quelque chose dans ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Permute
    {
       public int a;
       public int b;
     
       public Permute(int a, int b)
       {
          this.a = b;
          this.b = a;
       }
    }
    et pour l'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    int a = 10;
    int b = 20;
     
    Permute permute = new Permute(a, b);
    a = permute.a;
    b = permute.b;
    Sinon, si tu veux permuter des valeurs au sein d'une même instance de classe, tu peux aussi faire ceci
    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
    public class TestPermutation {
        public int a = 20;
        public int b = 2;
     
        public void echange(int a, int b)
        {
            this.a = b;
            this.b = a;
        }
     
        public void trace()
        {
            System.out.println("Valeurs : a=" + a + ", b=" + b);
            echange(a, b);
            System.out.println("Valeurs : a=" + a + ", b=" + b);
        }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Ben si, son problème est aussi lié au passage par valeur, sa fonction ne sert strictement à rien en l'état puisque tu appelles la fonction en lui passant 2 valeurs et que tu ne récupérera rien en retour (mais tu auras toujours tes attributs d'appel a et b dans l'état où ils étaient avant l'appel)
    J'ai bien vu son problème, je voulais juste mettre le doigt sur le faire qu'il a des variables masquées : je pense qu'il appelait sa méthode en pensant que de passer a et b en paramètres ferait en sorte que ça modifie les variables internes à la classe.

    Et accessoirement, pour permuter deux variables au sein d'une même classe, tu as pas besoin de paramètres à ta méthode ^^


    (et si il avait fait le même code qu'il a présenté avec des Integer plutôt que des int, le résultat aurait été le même, donc le problème n'était pas le passage par référence ou par valeur)
    Je ne suis pas mort, j'ai du travail !

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par eulbobo Voir le message
    Et accessoirement, pour permuter deux variables au sein d'une même classe, tu as pas besoin de paramètres à ta méthode ^^
    Oui mais du coup, tu es obligé de passer par une variable temporaire... moi pas
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Oui mais du coup, tu es obligé de passer par une variable temporaire... moi pas
    Du coup t'en prends deux sous forme de paramètres :p

    Haaaa la bonne vielle époque des tricks pour économiser une p*** de variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Permute
    {
       public int a;
       public int b;
     
       public Permute()
       {
         a = a^b;
         b = a^b;
         a = a^b;
       }
    }

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Rebonjour et merci pour vos réponses , actuellement j'en suis là mais jai des erreurs de compilations sur le mot clé "this"


    public class permute {
    public void echange(int a,int b){
    this.a=b;
    this.b=a;
    }

    public static void main(String[] args) {

    int d=1;
    int e=2;
    echange(d,e);
    System.out.println("d vaut " + d+ "e vaut " + e);
    }
    }

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Dans ta classe Permute, tu n'as pas de variables a et b (public int a; et public int b; dans mon exemple)
    "this" représente l'instance en cours, quand dans la méthode echange tu fais "this.a", tu fais référence à la variable d'instance à laquelle tu affectes la variable paramètre b passée à la fonction.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par jmc18100 Voir le message
    Rebonjour et merci pour vos réponses , actuellement j'en suis là mais jai des erreurs de compilations sur le mot clé "this"
    Le code qui t'avais été proposé est

    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
    public class permute {
      int a;
      int b;
      public void echange(int a,int b){
        this.a=b;
        this.b=a;
      }
     
      public static void main(String[] args) {
     
        Permute p = new Permute();
        p.a=4;
        p.b=2:
        p.echange(p.a,p.b);
        System.out.println("a vaut " + p.a+ "b vaut " + p.b);
      }
    }
    ce qui n'est pas le même du tout....

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    oui mais malgré tout , j'ai une erreur de compilation sur la ligne Permute p=new permute (var1,var2)
    error: constructor Permute in class Permute cannot be applied to given types;
    je te rejoins mes deux fichiers


    class Permute {
    private int a;
    private int b;
    public void Permute(int a,int b){
    this.a=b;
    this.b=a;
    }
    }
    le main

    public class test_permute {

    public static void main(String[] args) {

    int var1=5;
    int var2=10;
    Permute p=new Permute(var1,var2);
    var1=p.b;
    var2=p.a;
    System.out.println(var1+ " " + var2);
    }
    }
    }

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    j'ai pigé
    merci beaucoup pour le temps que je vous ais fait perdre
    bye

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

Discussions similaires

  1. ajout dynamique de variable de type int
    Par new_wave dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 28/11/2008, 00h31
  2. [MySQL] Soustraction de deux variables de type DATETIME
    Par Sekmeth dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/01/2008, 10h11
  3. concaténer deux variables de type entière
    Par beegees dans le forum C
    Réponses: 22
    Dernier message: 02/11/2007, 12h52
  4. Réponses: 2
    Dernier message: 10/04/2007, 12h39
  5. Réponses: 3
    Dernier message: 23/02/2006, 09h37

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