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 :

Passage de paramètres par adresse en Java


Sujet :

Java

  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut Passage de paramètres par adresse en Java
    salut!
    Je cherche une reponse au problème de passage de paramètres par adresse en java !
    par exemple, je veux faire une procédure qui fait la permutation de deux entiers (j'ai essayé avec int et Integer mais ça marche pas ) voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    static void permut(Integer n1,Integer n2)
    {Intger t;
    t=n1;
    n1=n2;
    n2=t;
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 69
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void permut (int n1, int n2)
    {
         int t;
         t = n1;
         n1 = n2;
         n2 = t;
    }
    ne fonctionne pas ?


    EDIT: autant pour moi, tu veux que n1 devienne n2 peut être
    En java ce n'est pas possible (corriger moi si je me trompe) de passer par référence des types primitifs.
    Seul les objets sont référencés.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Bonjour,

    cela n'existe pas. Pas de paramètre par adresse en Java.
    Il existe de nombreuses solutions de contournement, qui font que ce n'est pas un problème, toute la question est de décider laquelle. Et cela dépend de ce que tu as vraiment besoin de faire.

    Dans le monde réel on a jamais besoin, en Java, d'une méthode comme cette "permut()". Essaie, tu verras : elle ne sert à rien.
    Pour te donner une bonne solution, tu vas donc devoir donner un bon exemple.

    Un exemple quand même : quand on a vraiment besoin d'intervertir deux éléments, ça veut dire que ces éléments sont contenus dans une structure où la position compte, comme un tableau, une List, une Map ou ce genre de chose.
    Permuter deux éléments dans une telle structure est trivial, j'espère que tu sauras faire tout seul !

    Citation Envoyé par lr.remy Voir le message
    Seul les objets sont référencés.
    Et cela ne résout pas le problème posé, puisque assigner une nouvelle référence à une variable qui contenait une référence, n'a pas d'effet sur l'ancienne référence.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut
    Integer est un objet ! non ?
    sinon existe t'il une solution sans utiliser les tableaux ou les listes (sans utilisation de fonctions mais plutôt de procédures) ?

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par mohsenuss91 Voir le message
    Integer est un objet ! non ?
    Oui. Et comme je l'ai dit, ça ne change absolument rien au problème.

    Citation Envoyé par mohsenuss91 Voir le message
    sinon existe t'il une solution sans utiliser les tableaux ou les listes (sans utilisation de fonctions mais plutôt de procédures) ?
    Il y a plein de solutions. Je te le demande pour la deuxième fois : c'est pour faire quoi ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Oui. Et comme je l'ai dit, ça ne change absolument rien au problème.



    Il y a plein de solutions. Je te le demande pour la deuxième fois : c'est pour faire quoi ?
    J'ai besoin de cette procédure pour faire la permutation de deux entiers qui se trouvent dans un tableau (donc je travail avec les indices et pour faciliter le travail j'ai besoin de cette procédure).

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par mohsenuss91 Voir le message
    pour faciliter le travail j'ai besoin de cette procédure
    Pas le moins du monde.
    Permuter deux éléments d'un tableau est parfaitement trivial.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static <T> void permut(T[] tab, int index1, int index2) {
      T temp = tab[index1];
      tab[index1] = tab[index2];
      tab[index2] = temp;
    }
    Ce serait plus compliqué si nous parlions, par exemple, d'une LinkedList. Dans ce cas-là la solution serait de ne pas le faire, et utiliser une ArrayList à la place d'une LinkedList.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Pas le moins du monde.
    Permuter deux éléments d'un tableau est parfaitement trivial.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static <T> void permut(T[] tab, int index1, int index2) {
      T temp = tab[index1];
      tab[index1] = tab[index2];
      tab[index2] = temp;
    }
    c'est une procedure donc il y a pas un return .
    sinon Le passage de paramètres et par valeur et non pas par adresse ! donc ça va pas changer dans le programme principal (la ou je fais l'appel) , non ?

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par mohsenuss91 Voir le message
    c'est une procedure donc il y a pas un return .
    Je ne sais pas pourquoi tu parles de ça, mais en Java, il n'y a ni procédure ni fonction. Il n'y a que des méthodes.
    Les méthodes qui indiquent void ne peuvent pas contenir de return. Les autres doivent conclure soit par un return, soit par un lancement d'Exception.

    Citation Envoyé par mohsenuss91 Voir le message
    sinon Le passage de paramètres et par valeur et non pas par adresse ! donc ça va pas changer dans le programme principal (la ou je fais l'appel) , non ?
    Non, et le plus simple aurait été d'essayer.

    C'est tout le principe des références dans Java.
    Toutes les variables objet sont en fait des références vers ces objets.
    Un tableau est un objet, donc une variable tableau est une référence vers ce tableau.

    Ce système de "références" fait que les objets ne sont pas dupliqués quand on les assigne à d'autres variables ou qu'on les passe en paramètres. L'objet lui-même reste en un seul exemplaire dans la mémoire. Donc peu importe quelles variables pointent vers lui : si une variable modifie son contenu, toutes les variables qui pointent vers lui le verront.

    Ici la méthode modifie le contenu du tableau, donc le contenu du tableau est modifié. Pour la méthode main(), pour les autres sous-méthodes, pour tout le monde, partout.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut
    J'ai pas bien compris le truc de
    dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static <T> void permut(T[] tab, int index1, int index2)

  11. #11
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    C'est le typage générique. Cette méthode peux accepter n'importe quel type d'objet dans le tableau avec ça.

Discussions similaires

  1. [c] passage de paramètres par adresse
    Par Ashin dans le forum C
    Réponses: 11
    Dernier message: 25/03/2008, 17h36
  2. Réponses: 3
    Dernier message: 29/06/2007, 17h18
  3. Passage de paramètres par adresse
    Par Irish dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/02/2007, 17h39
  4. Passage de paramètre par adresse, pointeur
    Par spileo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/01/2007, 19h00
  5. Réponses: 19
    Dernier message: 09/06/2006, 10h03

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