Java

Résolu/Fermé
Star - 6 févr. 2012 à 10:51
 Utilisateur anonyme - 6 févr. 2012 à 12:25
Bonjour ,
j'arrive pas à comprendre un programme en Java :
classe A {
void methode1( int x) {
x+=12;
}
void methode2( )
int y=3;
methode1(y);
System.out.println(y="+y); // y=3
}
}


apparement il doit afficher 15 , mais ya un asstus qu' j'arrive pas a le trouver pour comprendre pourquoi affiche 3 ??


et mérci a tous !!
A voir également:

3 réponses

titus22 Messages postés 1918 Date d'inscription jeudi 1 décembre 2011 Statut Membre Dernière intervention 16 février 2012 636
6 févr. 2012 à 10:54
La tu nous a donné une classe il faut voir le main pour comprendre :)

A ce que je vois :
méthode1 recoit X et lui ajoute 12

méthode2
appèle méthode 1 avec 3 en paramêtre et affiche y=3
1
ouéé , mais l'exemple est écrit comme ça , supposons que dans le Main() on aura une simple déclaration , par exmple
{
A obj = new A();
obj.methode2();
}
alors ca va affiché le 3 , alors comment ça ?


et mérci beaucoup de m'avoir répondu !!
0
titus22 Messages postés 1918 Date d'inscription jeudi 1 décembre 2011 Statut Membre Dernière intervention 16 février 2012 636
Modifié par titus22 le 6/02/2012 à 11:36
Oui c'est normal. Voila ce qui ce passe dans methode2 :

int y=3; // La tu déclare une variable y = 3
methode1(y); // La tu appele la méthode 1 en lui donnant 3 en paramêtre.
System.out.println("y="+y); // La tu affiche y = ainsi que la valeur de y qui est 3 car tu l'as pas changé

donc tu aura à l'écran :
y = 3


Ton problème c'est que ta méthode 1 n'est pas bien écrite.

void methode1( int x) {
x+=12;
}

En gros elle recoit le nombre 3 que tu lui envois, elle lui ajoute 12 et c'est tout. x est une variable local à la fonction. x sera détruit à la fin de la fonction. Tu dois utiliser cette valeur comme valeur de retour. Comme ceci :

int methode1( int x) {
x+=12;
return x;
}


et dans ta méthode 2 tu dois stocker cette valeur de retour pour pouvoir l'afficher en suite.
void methode2( ){
int y=3;
y=methode1(y);
System.out.println(y="+y); // y=3
}

Voila ;)


La classe A réecrite est simplifié :

classe A {
int methode1( int x) {
return x+12;
}

void methode2( )
int y=methode1(3);
System.out.println("y="+y);
}
}
0
mérci =)
0
Parce que méthode1 travaille sur une copie locale de x.
0
Utilisateur anonyme
6 févr. 2012 à 12:25
Salut,

C'est x qui prendra la valeur 15 et y reste = 3:

public class Main
   {
      public static void main(String args[])
      {
         A obj = new A(); 
         obj.methode2(); 
      } 
   }
   
	/*
	   public class A
   { 
      public void methode1( int x) // x = 3
      { 
         x+=12;  // x de 3 passe à 15
         System.out.println("x = " + x); // x = 15
      }
      
      public void methode2( )
      { 
         int y = 3; 
         methode1(y); 
         System.out.println("y= "+y); // y = 3
      } 
   }
   */


Cordialement,

Dan
0