OVH Cloud OVH Cloud

[Debutante] int cannot be dereferenced

6 réponses
Avatar
Lea
Bonsoir,

Je voudrais savoir comment éviter cette erreur à la compilation.

public boolean equals(Object o){
return x.equals(((Point)o).x) && y.equals(((Point)o).y);

x et y sont des entiers.

Vu mon niveau, de simples explications seraient les bienvenues ;)

Merci.

Léa

6 réponses

Avatar
Isammoc
public boolean equals(Object o){
return x.equals(((Point)o).x) && y.equals(((Point)o).y);


x.equals(((Point)o).x)
veut dire que tu appelles la méthode equals de la variable x
Or, AMHA x est un int, donc n'est pas un objet, donc n'a pas de méthode à
proprement parler
le mieux, ici, serait d'utiliser la fonction:

return x == ((Point)o).x) && y == ((Point)o).y;


Ce qui donnerait dans la version totale:

public boolean equals(Object o) {
if ( o instanceof Point) {
return x == ((Point)o).x) && y == ((Point)o).y;
}

return false;
}


le instanceof permet de ne pas avoir de probleme lors de l'appel d'equals
avec un parametre qui n'est pas un Point.

x et y sont des entiers.

Vu mon niveau, de simples explications seraient les bienvenues ;)

Merci.


J'espere t'avoir été utile.

Léa


--
Isammoc

Avatar
Wismerhill
Lea ecrivit le 27/02/2005 21:38 :
Bonsoir,

Je voudrais savoir comment éviter cette erreur à la compilation.

public boolean equals(Object o){
return x.equals(((Point)o).x) && y.equals(((Point)o).y);

x et y sont des entiers.

Vu mon niveau, de simples explications seraient les bienvenues ;)

Merci.

Léa


Un entier n'est qu'une valeur, sans méthode.

return x == (Point)o).x && y ==((Point)o).y;

Il suffit de tester directement la valeur avec ==.

Avatar
Hamiral
public boolean equals(Object o){
return x.equals(((Point)o).x) && y.equals(((Point)o).y);


Pour reprendre ce qui a déjà été dit, mais en y mettant les termes java :

int est un type primitif et non une référence d'objet. Aucune méthode ne
peut donc s'appliquer sur lui. On utilise dans ce cas l'opérateur ==.
Il existe un seul type presque primitif comportant un champ, c'est le
type tableau, qui a le champ length.
Exemple :
int[] tab = {0, 1, 2};
for(int i=0; i<tab.length; i++) {
System.out.println(""+tab[i]);
}

Avatar
no.bcausse.spam
Hamiral wrote:

Il existe un seul type presque primitif comportant un champ, c'est le
type tableau, qui a le champ length.
Exemple :
int[] tab = {0, 1, 2};
for(int i=0; i<tab.length; i++) {
System.out.println(""+tab[i]);
}


les tableaux sont des objets

int[] a = new Int[...];
vector.add(a); //pas de bleme
--
bruno Causse
http://perso.wanadoo.fr/othello

Avatar
Wismerhill
Causse Bruno ecrivit le 01/03/2005 09:28 :
Hamiral wrote:


Il existe un seul type presque primitif comportant un champ, c'est le
type tableau, qui a le champ length.
Exemple :
int[] tab = {0, 1, 2};
for(int i=0; i<tab.length; i++) {
System.out.println(""+tab[i]);
}



les tableaux sont des objets
+ 1



Avatar
Hamiral
Causse Bruno ecrivit le 01/03/2005 09:28 :

Hamiral wrote:


Il existe un seul type presque primitif comportant un champ, c'est le
type tableau, qui a le champ length.
Exemple :
int[] tab = {0, 1, 2};
for(int i=0; i<tab.length; i++) {
System.out.println(""+tab[i]);
}




les tableaux sont des objets


+ 1


Oui, au temps pour moi ...