Demande d'aide.. nouveau chez vous les Javaien(ne)

abgl007 -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

voila un petit code java pour échanger deux valeurs mais sa marche pas, je ne sais pas pourquoi????
Aider moi a trouver l'erreur SVP..
merci
====================
package metier;

import java.util.Scanner;

public class MethodeEchangeValeurs {

public static void main(String[] args) {
int a, b;
Scanner clavier = new Scanner(System.in);
System.out.print("Entrez une valeur pour a : ");
a = clavier.nextInt();
System.out.print("Entrez une valeur pour b : ");
b = clavier.nextInt(); 
System.out.println("a = " + a + " et b = " + b);
echange(a,b);
System.out.println("Après l'échange ");
System.out.println("a = " + a + " et b = " + b);
}

public static void echange(int x, int y) {
int tmp = x;
x=y;
y=tmp;
}

}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

1 réponse

KX Messages postés 19031 Statut Modérateur 3 020
 
Bonjour,

Ta méthode échange bien x et y. Mais ça n'a aucun effet sur a et b.
C'est normal, ça s'appelle le passage par valeur, c'est comme ça que travaille Java avec les types primitifs.

Remarque : pour les objets on parlera plutôt de passage par référence, ce qui permet d'altérer le contenu de l'objet (même si la référence est également passé par valeur donc on ne peut pas la changer non plus).
0
abgl007 Messages postés 1 Statut Membre
 
Oui merci, je comprend bien..
c'est quoi la solution alors dans ce cas..
merci
0
KX Messages postés 19031 Statut Modérateur 3 020 > abgl007 Messages postés 1 Statut Membre
 
Tu ne peux pas faire d'inversion de types primitifs en passant par une méthode.

Si tu veux le faire il faudrait passer par des objets et altérer leurs contenus, par exemple avec AtomicInteger.

package metier;

import java.util.Scanner;
import java.util.concurrent.atomic.AtomicInteger;

public class MethodeEchangeValeurs {

    public static void main(String[] args) {
        Scanner clavier = new Scanner(System.in);
        System.out.print("Entrez une valeur pour a : ");
        AtomicInteger a = new AtomicInteger(clavier.nextInt());
        System.out.print("Entrez une valeur pour b : ");
        AtomicInteger b = new AtomicInteger(clavier.nextInt());
        System.out.println("a = " + a + " et b = " + b);
        echange(a, b);
        System.out.println("Après l'échange ");
        System.out.println("a = " + a + " et b = " + b);
    }

    public static void echange(AtomicInteger x, AtomicInteger y) {
        int tmp = x.get();
        x.set(y.get());
        y.set(tmp);
    }
}
0