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 :

passage de paramètres sous java


Sujet :

avec Java

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 131
    Points : 93
    Points
    93
    Par défaut passage de paramètres sous java
    Salut;
    j'ai un petit problème concernant le passage des paramètres, bon j'ai un tableau définit comme une variable globale (public) dans une classe et qui est passé comme paramètre pour un constructeur d'une autre classe qui l'utilise pour les traitements et je me suis étonnée lorsque j'ai constaté que ces valeurs sont modifiés ,SVP quelqu’un a une idée ?.
    Cordialement

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    oui, je pense qu'une bonne idée serait de montrer le code.

    Petit "truc" qui te servira toujours en informatique : c'est toujours le cas. Il faut toujours montrer le code. Toute ta vie.
    Si tu te demandes dans quel cas il serait judicieux de ne pas montrer le code, c'est simple : ça n'existe pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    si ton autre classe ne dois pas modifier le contenu du tableau d'origine, il faut lui passer une copie de ce tableau. Ou revoir le code de ta classe pour qu'il ne modifie pas ce tableau.

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 131
    Points : 93
    Points
    93
    Par défaut
    Bonjour;
    enfaîte Mr tchize j'ai pensé au point de mettre une copie et de l'envoyer comme paramètre, mais c'est toujours le cas. donc je pense que lorsque on passe comme paramètre un attribut pour un autre constructeur de classe qui possède le même attribut ,cette dernière aura la possibilité de modifier ce paramètre .
    Note: les classes sont dans le même projet mais dans un package différent.
    donc voici mon code de la classe 1:
    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
    39
    40
    41
    42
    43
    44
    45
    46
     
    public class LA2 extends javax.swing.JFrame {
    ..................
    ...................
     public Planification_Traj trajectory;
     public int Q_init[] = {-60, 61, 30, 38, -15, 1};
     
     public LA2(AgentL2 a) {
    .....................// traitement a part
    .....................
    }
    // cette méthode est appelée lors de chaque message reçu
        public void message_handler(ACLMessage msg) {
     
      String[] h = msg.getContent().split("#");
            String sender = msg.getSender().getLocalName();
            System.out.println("le message de handler" + msg.getContent());
     
            String heading = h[0];
     
            switch (heading) {
    ...........
    ................
           case "Operation": {
    ..................................// traitement a part 
    .............................................
                     int tab[]=Q_init;
                    trajectory = new Planification_Traj(new Point3di(Integer.parseInt(cible[0]), Integer.parseInt(cible[1]), Integer.parseInt(cible[2])),      newPoint3di(Integer.parseInt(pince[0]), Integer.parseInt(pince[1]), Integer.parseInt(pince[2])),tab);
                    liste_angle = trajectory.Calcule_trajctory(); 
    ...................
    ................................//  traitement a part 
     
                    liste_angle.clear();// vider la liste après l'utilisation 
                    for(int i=0;i<6;i++){
                    System.out.println("Q_init = "+Q_init[i]);} 
     
     
                }
                break;
    ................
    ....................
    }
     
     
     
    }
    la classe2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class Planification_Traj {
    ............
    ...........
     public int[] Q = new int[6];
        public Planification_traj(Point3di cible, Point3di CurrentPosBras, int[] cord_artc) {
            Q = cord_artc;
            this.Cible = cible;
            this.CurrentPosBras = CurrentPosBras;
        }
    .............
    ........
     }
    // méthode calcule trajectory utilise l'attribut Q dans les traitements
    Merci d'avance.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je ne vois pas de copie, tu envoies le même tableau en paramètre.

    Fais un nouveau tableau avec new et mets-y les mêmes éléments dedans, ça c'est une copie. (Ou utilise simplement Arrays.copyOf() qui s'en occupe pour toi.)

    Par ailleurs, quand j'ai suggéré de montrer le code, je voulais dire celui qui montre que le problème existe. Le même problème peut parfaitement exister dans ton programme et dans le système de gestion de stocks de ma boucherie, pas vrai ? Donc ce qui est intéressant, c'est le code qui est pareil dans les deux cas. Le code qui n'existe que dans ton programme et qui ne peut pas être lié au problème, tu peux l'enlever. En fait, ça devrait être la première chose que tu fais quand tu recherches une solution. Si tu gardes des choses qui n'ont rien à voir avec le problème, tu ne comprendras jamais le problème et donc tu n'auras jamais les moyens de le résoudre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 131
    Points : 93
    Points
    93
    Par défaut
    Merci Thelvin pour vos conseilles , et merci pour la remarque en ce qui concerne le passage des paramètres , donc lorsque c'est un attribut d'une classe il est préférable de mettre une copie pour ce dernier, avant de l'passer comme paramètre pour un autre constructeur d'une classe dans mon cas



    N'essayez pas de devenir un homme de succès .Essayez de devenir un homme de valeurs

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    De manière générale, quand tu as un objet qui peut être modifié, que tu veux passer cet objet à d'autres classes/méthodes/modules/trucs, et que tu ne veux pas que cet autre chose le modifie,
    alors il faut en faire une copie d'abord et passer la copie au lieu de l'objet d'origine.

    Un tableau est un objet modifiable, donc tout cela s'applique.
    D'ailleurs, un tel objet ne devrait jamais être public parce que dans ce cas tout le monde peut venir le modifier sans que tu aies besoin de le passer à qui que ce soit et donc sans qu'il soit question de faire des copies d'abord.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 131
    Points : 93
    Points
    93
    Par défaut
    oui Mr vous avez raison sur la visibilité d'un attribut il faut la mettre private mais c'était juste une façon de pratiquer les choses pour ne pas passer à chaque fois par des getters/setters en plus c'est un travail qui ne nécessite pas vraiment une sécurité , mais bon normalement on dois respecter les notions de bases du java
    et pour le passage des paramètres je rassure vos solutions à mon problème (par une copie) et la visibilité sa na rien n'avoir normalement avec le passage car j'ai testé précédemment de mettre private au lieu de public et le problème persiste toujours.
    Merci pour vos commentaires valorisés

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

Discussions similaires

  1. Mode de passage des paramètres en java
    Par S_ami dans le forum Général Java
    Réponses: 3
    Dernier message: 29/04/2011, 23h29
  2. Passage de paramètre entre Java et C++
    Par JeanNoel53 dans le forum C++
    Réponses: 4
    Dernier message: 17/08/2009, 17h31
  3. [CR][Java] Passage de paramètres
    Par ista9im dans le forum SDK
    Réponses: 1
    Dernier message: 16/01/2006, 08h26
  4. [Java] méthode static et passage de paramètre
    Par tomburn dans le forum Langage
    Réponses: 10
    Dernier message: 11/05/2005, 16h19
  5. problème de passage de paramêtre sous mozilla
    Par mat10000 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/09/2004, 10h48

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