Adloun

programmation Java (école d'ingénieur) · Chapitre 7 · Application directe du cours

Échanger deux points

Classes et objets · niveau 2

Énoncé

On veut une méthode static qui échange deux points.

  • La méthode suivante est-elle correcte ? Pourquoi ?

static void echangerRefs(Point a, Point b) {
    Point t = a;
    a = b;
    b = t;
}
  • Écrire une méthode echangerCoords(Point a, Point b) qui produit bien l'effet voulu du point de vue de l'appelant.

Corrigé

  • Non. Les paramètres a et b sont des copies des références de l'appelant. La méthode échange ses deux copies locales, puis se termine : les variables de l'appelant n'ont pas bougé. C'est la proposition sur le passage d'un objet en paramètre.
  • On ne peut pas changer les variables de l'appelant, mais on peut modifier les objets qu'elles désignent : on échange leurs coordonnées.

static void echangerCoords(Point a, Point b) {
    double tx = a.x, ty = a.y;
    a.x = b.x;
    a.y = b.y;
    b.x = tx;
    b.y = ty;
}

Avec et :


échange des références : p = (1.0, 2.0), q = (3.0, 4.0)
échange des coordonnées : p = (3.0, 4.0), q = (1.0, 2.0)

Attention : si l'on appelle echangerCoords(p, p), la méthode reçoit deux références vers le même objet ; elle fonctionne quand même ici, parce qu'elle sauvegarde les coordonnées dans des variables locales avant de les écraser.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →