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

Java Discussion :

swap pour permutter 2 objets ?


Sujet :

Java

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut swap pour permutter 2 objets ?
    Bonjour,

    Je me demande comment faire un swap en Java pour permuter 2 objets étant donné que ce sont les références qui sont passés par valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void swap (Object o1, Object o2) {
    Object temp;
    temp = o1;
    o1 = o2;
    o2 = temp;
    }
    Ce code ne fonctionne évidemment pas mais comment faire ?

    Comment écrire une méthode de swap qui fonctionne correctement ?

    Merci
    ++

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 121
    Points : 136
    Points
    136
    Par défaut
    Bonjour italiasky


    Heureusement que celà ne fonctionne pas :

    Tu pourrais alors permuter n'importe que référence dans la mémoire de java et donc mélanger n'importe quel type d'objet.

    Swap, oui, mais sur quelle collection ?...
    Il faut que swap soit une méthode de la collection d'objets que tu traites ou que swap connaisse la collection sur laquelle tu travailles.

  3. #3
    Membre habitué Avatar de fomazou
    Inscrit en
    Mars 2004
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 220
    Points : 151
    Points
    151
    Par défaut
    Je me demande comment faire un swap en Java pour permuter 2 objets étant donné que ce sont les références qui sont passés par valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void swap (Object o1, Object o2) {
    Object temp;
    temp = o1;
    o1 = o2;
    o2 = temp;
    }
    si l'on fait :
    Object o1 = new Object();
    o2 se voit affecté de l'endroit de la mémoire, disons 9135674 (pr exemple) l'objet a été créé. de m^me pour o2 avec une autre adresse

    Quand tu appelles swap(o1 o2), c'est 9135674 qui est passé à la méthode avec celle de o2.

    swap(...) agit sur le contenu de o1 et o2, en utilisant les adresse qui leur sont attribués
    tu sauvegarde o1 ensuite tu mets dans o2 l'adresse de o1 et dans o1 celle sauvegardé: ça marche la permutation. leur elémént on été permuter.
    pas besoin d'un return. donc après l'appel de la méthode o1 contient la reference à o2 et o2 celle à o1

    Si swap remplace o1 par un nouvel objet, avec un o1 = new..., alors ce n'est pas pareil. o1 se verra affecter d'un nouvel emplacement mémoire, disons 9989889. Il n'est pas possible de le récupérer en-dehors de la méthode sans return, puisque la référence de o1 est passée par valeur. Un return est donc indispensable pour récupérer le nouveau o1. et l'ancienne est perdu.
    "le temps c'est le meilleur des médécins, peut être aussi le meilleur des assassins" Bernis-Francine

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par fomazou Voir le message
    si l'on fait :
    Object o1 = new Object();
    o2 se voit affecté de l'endroit de la mémoire, disons 9135674 (pr exemple) l'objet a été créé. de m^me pour o2 avec une autre adresse

    Quand tu appelles swap(o1 o2), c'est 9135674 qui est passé à la méthode avec celle de o2.

    swap(...) agit sur le contenu de o1 et o2, en utilisant les adresse qui leur sont attribués
    tu sauvegarde o1 ensuite tu mets dans o2 l'adresse de o1 et dans o1 celle sauvegardé: ça marche la permutation. leur elémént on été permuter.
    pas besoin d'un return. donc après l'appel de la méthode o1 contient la reference à o2 et o2 celle à o1
    Non, la permutation ne fonctionne pas en dehors de la méthode swap !

    Il faut typer la méthode swap avec tes objets, et ajouter une méthode à tes objets pour faire une copie sans modifier le pointeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void swap( MonType t1, MonType t2 )
    {
      MonType tmp = t1.clone();
      t1.copyFrom( t2 );
      t2.copyFrom( tmp );
    }
    Mais ce n'est pas possible de généraliser avec "Object".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Points : 64
    Points
    64
    Par défaut
    existe t'il un moyen pour faire , en java , un swap sur deux int par exemple?( des types de bases )???

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Points : 64
    Points
    64
    Par défaut
    auto réponsu : impossible sans passer par type Wrapper

  7. #7
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    ok merci, oui effectivement la solution de dinobogan semble la mieux adaptée !

    bonne soirée
    ++

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

Discussions similaires

  1. utiliser un script pour inserer des objets 3D
    Par s_mihai dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/08/2005, 13h52
  2. Réponses: 1
    Dernier message: 27/07/2005, 11h47
  3. norme pour nommer les objets d'une bd
    Par katou3 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 13/07/2005, 12h30
  4. Lancer des shell unix pour creation d'objet ORACLE
    Par sygale dans le forum Administration
    Réponses: 6
    Dernier message: 27/10/2004, 18h03
  5. Plusieurs vues pour le même objet
    Par nicolas66 dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/10/2004, 10h27

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