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

abgl007 -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   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 Date d'inscription   Statut Membre Dernière intervention  
 
Oui merci, je comprend bien..
c'est quoi la solution alors dans ce cas..
merci
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > abgl007 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
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