Tableau d'objets
                    
        
     
             
                    talbsbast
    
        
    
                    Messages postés
            
                
     
             
            61
        
            
                                    Statut
            Membre
                    
                -
                                     
talbsbast Messages postés 61 Statut Membre -
        talbsbast Messages postés 61 Statut Membre -
        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,
            
            
                
            
                
    
    
    
        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,
        A voir également:         
- Tableau d'objets
 - Tableau word - Guide
 - Site pour vendre des objets d'occasion - Guide
 - Tableau ascii - Guide
 - Trier un tableau excel - Guide
 - Tableau croisé dynamique - Guide
 
2 réponses
                        
                    "pourquoi il écrase la valeur de la case 0 ?"
Parce que tu les as déclarés static !!!
    
                Parce que tu les as déclarés static !!!
public class Point { 
public static long x; 
public static long y; 
                
                
                        
                    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 :)
    
                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 :)
    "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.
    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.