Tableau d'objets

Fermé
talbsbast Messages postés 54 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 3 février 2023 - 23 mars 2014 à 17:03
talbsbast Messages postés 54 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 3 février 2023 - 23 mars 2014 à 19:54
Bonjour,

J'ai créé la calsse Point pour des définir des objets de type Point avec des coordonnées x et y:
public class Point {
public static long x;
public static long y;

public Point(long a, long b){
x = a;
y = b;
}

public static void Affiche(boolean b){
if(b)
System.out.println("("+ x +" , "+ y +")");
else
System.out.print("("+ x +" , "+ y +") ");
}
}

et quand j'essaie de créer un tableau de points j'arrive pas à les stocker correctement,
voila un exemple de ce que j'ai écrit dans le main :
Point[] E = new Point[100];
E[0] = new Point(0, 1);
E[1] = new Point(3, 2);
E[0].Affiche(false);
E[1].Affiche(true);
il est sencé afficher : (0, 1) (3, 2)
mais il m'affiche : (3, 2) (3, 2)

pourquoi il écrase la valeur de la case 0 ???

Merci pour vos réponses et bonne soirée ;)
Cordialement,

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
23 mars 2014 à 19:07
"pourquoi il écrase la valeur de la case 0 ?"
Parce que tu les as déclarés static !!!

public class Point { 
public static long x; 
public static long y; 
1
talbsbast Messages postés 54 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 3 février 2023 1
23 mars 2014 à 19:38
Merci KX pour votre réponse,
bon je ne sais pas parfaitement le rôle de static,
mais j'ai essayé de l'enlevé et ça m'affiche une erreur dans la fonction d'affichage!
car j'utilise dedans x et y (même si je mis this.x et this.y)
comment je vais régler ce bug ? Merci :)
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
23 mars 2014 à 19:47
"je ne sais pas parfaitement le rôle de static"
C'est un point important à comprendre.

Un attribut static appartient à la classe, sa valeur est commune à tous les objets de cette classe.
Donc si tu modifies x ou y alors qu'ils sont static, comme la valeur est partagée, alors elle sera changée pour tous les objets.

Il en est de même pour les méthodes static, elles appartiennent à la classe, pas à un objet particulier. Donc si maintenant tu enlèves le mot clé static à x et y, tu ne peux plus utiliser ces valeurs dans ta méthode static Affiche, car x et y appartiennent désormais à un objet que ne connaît pas Affiche.

Pour faire ce que tu veux il faut donc aussi enlever le mot clé static à Affiche, qui n'a rien à faire ici.
0
talbsbast Messages postés 54 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 3 février 2023 1
23 mars 2014 à 19:54
Merci beaucoup pour les explications, c'est très clair :)
0