En java besoin d aide!!

rosaRosi Messages postés 43 Statut Membre -  
rosaRosi Messages postés 43 Statut Membre -
Bonjour,
en java j ai une classe a:
public class a{
static int i=5;
static int j=5;
static void test (int j){
i+=j;
j+=5;
}

public static void main (......)
{
test (i)
}
je veux savoir comment la valeur de i va etre egale a 10 meme que c est un passage par valeur !!
merci d avance
Configuration: Windows XP
Firefox 3.0.16

15 réponses

  1. scriptiz Messages postés 1494 Statut Membre 425
     
    Ce sont des variables statiques, à savoir qu'elles sont déclarées pour toute la classe et donc le traitement à l'intérieur d'une méthode affecte la valeur à l'intérieur d'une autre.
    0
  2. rosaRosi Messages postés 43 Statut Membre
     
    dz. mais j ai pas bien saisie comment elle soritra av une valeur de 10 meme que c est statique !!
    pourriez -vous m eclairé ?
    merci :)
    0
  3. bojinov99 Messages postés 10 Statut Membre
     
    déjà c'est pas très malin d'avoir appelé ta variable j dans ta fonction test car elle porte le même nom que ta variable global j!

    dc que veux tu faire avec ta fonction test()????
    et pk veux tu mettre tes fonctions en static???
    0
  4. rosaRosi Messages postés 43 Statut Membre
     
    c est pas moi qui fait ce programme!
    c est juste un exercice !!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bojinov99 Messages postés 10 Statut Membre
     
    et quelle est le but de l'exercice? quel est le but de ton exercice???
    0
  7. rosaRosi Messages postés 43 Statut Membre
     
    le but de cet exercice c est de bien manipuler les passage par arguments !! et je veut connetre la valeur de i sortant de la methode test(i) dans le programme principale!!
    et merci !
    0
  8. bojinov99 Messages postés 10 Statut Membre
     
    ah ok!!!
    ben au début
    i = 5
    et j on s'en fou

    ton main appel la fonction test(i)
    celà signifie que dans ta fonction test le j sera remplacé par la valeur de i (pour le moment égale à 5)

    dc ta fonction test fait : i+=5 ce qui équivaut à i= i+5 ce qui équivaut à i=5+5 donc égale à 10. si c'est ça ta question....
    0
  9. rosaRosi Messages postés 43 Statut Membre
     
    oui c est ca ma question merci !!
    mais dans le programme principale j ai appelé i pas j !! c est parceke il faut que cette methode utilise l attribut j?? j ai un peu d ambiguité ! mercii encore de ton aide :)
    0
  10. bojinov99 Messages postés 10 Statut Membre
     
    en fait là ta variable static j ne sert à rien car tu ne l'utilises jamais!!!!!
    0
  11. rosaRosi Messages postés 43 Statut Membre
     
    ok!!
    0
  12. danimo
     
    Salut,

    J'ai modifié ton extrait de code comme ceci:

     public class EssaiMethodeTest
       { 
          private static int i=5; 
          private static int j=5;
       
           static void test(int j2) // avec test(int j) tu déclarais un autre j
                               // visible uniquement dans la méthode test
                               // et quand tu faisais j+=5 c'est ce j que tu modifiais
                               // pas celui de la classe qui restait toujours a 5
          { 
             i+=j2;
             j+=5;
          } 
       
           public static void main (String[] args) 
          { 
             test(i); // tu passes le i déclaré dans la classe et qui vaut 5
                      // j2 vaut donc 5 et i passe a 10 en faisant i+=j2
                      // j qui vaut 5 passe a 10 en faisant j+=5
             System.out.println("\ni = " + i);
             System.out.println("j = " + j + "\n");
             
          	// Attention: si tu appeles de nouveau test(...):
             test(i); // tu passes le i déclaré dans la classe et qui vaut 10 maintenant
                      // j2 vaut donc 10 et i passe a 20 en faisant i+=j2
                      // j qui étais a 10 vaut maintenat 15 en faisant j+=5
             System.out.println("\ni = " + i);
             System.out.println("j = " + j + "\n");
             
    // A toi de voir si tu dois réinitialiser i et j a 5 avant un nouvel appel de test(---) ou pas
          }
       }
    


    Lis les commentaires compile et execute et dis moi si tu as besoin de plus de précisions.

    Cordialement,

    Dan
    0
  13. bojinov99 Messages postés 10 Statut Membre
     
    lol voilà. dan était plus précis et plus courageux que moi ^^
    0
  14. rosaRosi Messages postés 43 Statut Membre
     
    merci danimo:
    mais dans mon execice la premiér question c etait comme j ai ecri test (int j)
    et la deuxieme question c etait de remplacer j par k dans test (int j) comme tu a ecri .
    alors il existe une difference entre les deux !!
    0
  15. danimo
     
    Re,

    public static void test(int j)
    {
    i+=j; // i est le i de la classe
    j+=5; // j est le j paramètre pas le j de la classe
    }

    Tu déclares un paramètre j qui sera initialisé avec la valeur correspondant à celle passée depuis la méthode main (donc static) >> test (i); soit 5. Or int j existe déjà au niveau classe (en static aussi)
    et qui ne sera pas modifié par la méthode test (j+=5;) et restera à 5
    Par contre i sera modifië et prendra bien la valeur 10.

    public static void test(int j2) // ou k pourquoi pas qui vaudra 5
    {
    i+=j2; // i passera également à 10 comme ci-dessus
    j+=5; // mais cette fois j passera à 10 et tout dépend de l'utilisation que tu veux en faire ce qui n'est pas indiqué car pour l'intant il est incrémenté c'est tout...

    Dan
    }
    0
  16. rosaRosi Messages postés 43 Statut Membre
     
    merci bocou pr ton aide ! :))))))))))))))))) j ai compri !!
    0