Blanc de mémoire pour passer des variables en paramètres [Résolu]

Signaler
Messages postés
45
Date d'inscription
mardi 6 septembre 2005
Statut
Membre
Dernière intervention
28 avril 2009
-
Messages postés
45
Date d'inscription
mardi 6 septembre 2005
Statut
Membre
Dernière intervention
28 avril 2009
-
voilà j'ai un blanc de mémoire, je sais que ca ce fais dans d'autre langague mais j'ai oublier le nom et surtout comment faire en java. Je souhaite envoyer a un module des varibles en paramètre afin qu'il qu'il traite les donnés. J'aimerais que les modification qu'il apporte au variable modifie également les originals dans l'évenement appelant. voici un exemple très simple qui illustre le principe que je cherche :

    public void jButton1_actionPerformed(ActionEvent e) {
        int liI = 1;
        String lsTest = "Patate";
        test(liI, lsTest);
        jLabel2.setText(String.valueOf(liI)+" "+lsTest);
    }


    private void test(int piI, String psTest)
    {
        piI = piI + 2;
        psTest = "Patates";
    }

j'aimerai que le Texte de jLabel2 soit : "3 Patates" et non "1 Patate".

L'exemple içi ne réflète que ce que le principe que je recherche car en réalité, j'ai trop de variable a modifier pour utiliser un return et mon module est appeler par trop d'événement différent pour utiliser une variable global.

5 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
122
Cela s'appelle le passage par référence.

Mais en java, si tu utilise un objet, il le passe en référence !

Donc ton affichage du label devrait être dans cet exemple : "1 Patates" car le psTest est un objet, alors que le piI est un type primitif (passe lui un Integer à la place).
Messages postés
75
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009
32
Salut, tu peux toujours créer un objet (sa tombe bien, java est objet) !

class Data {

  public int i;
  public String s;
}
public void jButton1_actionPerformed(ActionEvent e) {
  Data d = new Data();
  d.i = 1;
  d.s = "Patate";
  test(d);
  jLabel2.setText(d.i + " " + d.s);
}

private void test(Data d) {
  d.i += 2;
  d.s = "Patates";
}
Messages postés
45
Date d'inscription
mardi 6 septembre 2005
Statut
Membre
Dernière intervention
28 avril 2009

Merçi de me rafraichir la mémoire. 

mais voilà je change mes int pour des Integer et j'obtiens des message d'erreur me disant type incompatible. j'oublie surement un détails mais quoi?

Et pour mes String comment je peux faire car dans mon exemple tu me dit que comme psTest est un objet, puisqu'il est une String, mon résultat serai "1 Patates" mais mon résultat est "1 Patate" sans s dois-je également modifier le type mes string pour que cela fonctionne?
Messages postés
112
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
20 décembre 2011

Bonjour,

Et si tu utilisais une variable globale, il va bien évidemment garder la meme valeur que tu lui donnes.

Ceci dit, il est toujours déconnseillé d'utiliser les variables globales, parce qu'elles risquent de changer de valeur et tout le tralala, mais ca peut t'aider dans ton cas.

Kenza
Messages postés
45
Date d'inscription
mardi 6 septembre 2005
Statut
Membre
Dernière intervention
28 avril 2009

Merci du coup main, là je sais où je vais.