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

Fermé
abgl007 - Modifié le 27 juin 2018 à 21:59
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 27 juin 2018 à 22:32
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 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
27 juin 2018 à 22:13
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 mercredi 27 juin 2018 Statut Membre Dernière intervention 27 juin 2018
27 juin 2018 à 22:18
Oui merci, je comprend bien..
c'est quoi la solution alors dans ce cas..
merci
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019 > abgl007 Messages postés 1 Date d'inscription mercredi 27 juin 2018 Statut Membre Dernière intervention 27 juin 2018
27 juin 2018 à 22:32
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