PDA

View Full Version : [JAVA] Metodo equals


marcoqwertyuiop
29-05-2015, 00:28
Salve, sul libro fa questo esempio per usare il metodo equals:
class Quadrilatero {
int latoA;
int latoB;
int latoC;
int latoD;
public Quadrilatero(int a, int b, int c, int d) {
latoA = a;
latoB = b;
latoC = c;
latoD = d;
}
public int getLato(int i) {
switch (i) {
case 0:
return latoA;
break;
case 1:
return latoB;
break;
case 2:
return latoC;
break;
case 3:
return latoD;
break;
}
boolean equals(Object o) {
Quadrilatero q = (Quadrilatero) o;
if (getLato(0) == q.getLato(0) && getLato(1) == q.getLato(1) && getLato(2) == q.getLato(2) && getLato(3) == q.getLato(3)) return true;
else {
return false;
}
}
}
public static void main(String[] args) {
Quadrilatero uno = new Quadrilatero(1, 1, 1, 1);
Quadrilatero due = new Quadrilatero(1, 1, 1, 1);
System.out.println(uno.equals(q2));
}
}

Perchè non funziona? Cioè deve vdere se i lati del primo quadrilatero sono uguali ai lati del secondo quadrilatero.

Amsirak
29-05-2015, 06:56
perché q2 (che passi come argomento ad equals) non esiste

marcoqwertyuiop
29-05-2015, 10:53
perché q2 (che passi come argomento ad equals) non esiste

Giusto, ma anche se correggo e metto due al posto di q2 mi da comunque errore:

http://img.imagesia.com/fichiers/y7/errore_imagesia-com_y7iq.png

Guille
29-05-2015, 11:40
Giusto, ma anche se correggo e metto due al posto di q2 mi da comunque errore:

http://img.imagesia.com/fichiers/y7/errore_imagesia-com_y7iq.png

Il problema dipende dal fatto che hai definito il metodo equals all'interno del metodo getLato. ;)

marcoqwertyuiop
29-05-2015, 12:59
Il problema dipende dal fatto che hai definito il metodo equals all'interno del metodo getLato. ;)

Da comunque errore:
class Quadrilatero {
int latoA;
int latoB;
int latoC;
int latoD;
public Quadrilatero(int a, int b, int c, int d) {
latoA = a;
latoB = b;
latoC = c;
latoD = d;
}
public int getLato(int i) {
switch (i) {
case 0:
return latoA;
break;
case 1:
return latoB;
break;
case 2:
return latoC;
break;
case 3:
return latoD;
break;
}
}
boolean equals(Object o) {
Quadrilatero q = (Quadrilatero) o;
if (getLato(0) == q.getLato(0) && getLato(1) == q.getLato(1) && getLato(2) == q.getLato(2) && getLato(3) == q.getLato(3)) return true;
else {
return false;
}
}
public static void main(String[] args) {
Quadrilatero uno = new Quadrilatero(1, 1, 1, 1);
Quadrilatero due = new Quadrilatero(1, 1, 1, 1);
System.out.println(uno.equals(due));
}
}
http://s14.postimg.org/qbko66ee9/errore.png

wingman87
29-05-2015, 13:34
Sì ma leggi l'errore: "attempting to assign weaker access privileges; was public"
E' chiaro che il metodo deve essere public.

marcoqwertyuiop
29-05-2015, 15:56
Sì ma leggi l'errore: "attempting to assign weaker access privileges; was public"
E' chiaro che il metodo deve essere public.

Si, ma se metto il metodo public, mi esce l'errore che mi dice di torgliere i break nello swtch, li tolgo e mi esce quest'altro errore:
class Quadrilatero {
int latoA;
int latoB;
int latoC;
int latoD;
public Quadrilatero(int a, int b, int c, int d) {
latoA = a;
latoB = b;
latoC = c;
latoD = d;
}
public int getLato(int i) {
switch (i) {
case 0:
return latoA;
case 1:
return latoB;
case 2:
return latoC;
case 3:
return latoD;
}
}
public boolean equals(Object o) {
Quadrilatero q = (Quadrilatero) o;
if (getLato(0) == q.getLato(0) && getLato(1) == q.getLato(1) && getLato(2) == q.getLato(2) && getLato(3) == q.getLato(3)) return true;
else {
return false;
}
}
public static void main(String[] args) {
Quadrilatero uno = new Quadrilatero(1, 1, 1, 1);
Quadrilatero due = new Quadrilatero(1, 1, 1, 1);
System.out.println(uno.equals(due));
}
}

http://s29.postimg.org/vhvoi8wtz/errore.png

Ma alla riga 27, la } ci deve stare per chiudere il metodo getLato.

wingman87
29-05-2015, 16:17
Questo perché non hai messo un case default. Se ad esempio richiami getLato(5) cosa deve succedere?

marcoqwertyuiop
29-05-2015, 18:55
Questo perché non hai messo un case default. Se ad esempio richiami getLato(5) cosa deve succedere?

Ok, ora funziona. Grazie.

class Quadrilatero {
int latoA;
int latoB;
int latoC;
int latoD;
public Quadrilatero(int a, int b, int c, int d) {
latoA = a;
latoB = b;
latoC = c;
latoD = d;
}
public int getLato(int i) {
switch (i) {
case 0:
return latoA;
case 1:
return latoB;
case 2:
return latoC;
case 3:
return latoD;
default:
return 0;
}
}
public boolean equals(Object o) {
Quadrilatero q = (Quadrilatero) o;
if (getLato(0) == q.getLato(0) && getLato(1) == q.getLato(1) && getLato(2) == q.getLato(2) && getLato(3) == q.getLato(3)) return true;
else {
return false;
}
}
public static void main(String[] args) {
Quadrilatero uno = new Quadrilatero(1, 1, 1, 1);
Quadrilatero due = new Quadrilatero(1, 1, 1, 1);
System.out.println(uno.equals(due));
}
}