26. april 2003 - 18:54
Der er
17 kommentarer og 1 løsning
problem med typen int
Hej I følgenden klasse får jeg en fejl i sætning 8, men hvorfor og hvad kan jeg gøre? Jeg får noget alla dette at vide: Cannot invoke compareTo(int) on the primitive type int Skal jeg evt. parse int om til noget andet? ----------------------------------------------------------- import java.util.*; public class LengthComparator implements Comparator { public int compare(Object o1, Object o2){ MP3 m1 = (MP3) o1; MP3 m2 = (MP3) o2; int length1 = m1.getLength(); int length2 = m2.getLength(); return length1.compareTo(length2); } }
Annonceindlæg fra Infor
26. april 2003 - 18:56
#1
Du kan bare sammenligne length1==length2 men du vil gerne have en int som svar - som compareTo giver. Nogen speciel grund?
26. april 2003 - 19:00
#2
Strengt taget er det vel du siger du vil: import java.util.*; public class LengthComparator implements Comparator { public int compare(Object o1, Object o2){ MP3 m1 = (MP3) o1; MP3 m2 = (MP3) o2; int length1 = m1.getLength(); int length2 = m2.getLength(); return (length1-length2); } }
26. april 2003 - 19:01
#3
Men der er formentlig bedre muligheder. Hvis MP3 klassen har en fornuftig compareTo så: import java.util.*; public class LengthComparator implements Comparator { public int compare(Object o1, Object o2){ MP3 m1 = (MP3) o1; MP3 m2 = (MP3) o2; return m1.compareTo(m2); } }
26. april 2003 - 19:02
#4
Ja så skal metoden jo nok have et andet navn også. :-)
26. april 2003 - 19:03
#5
import java.util.*; public class MP3Comparator implements Comparator { public int compare(Object o1, Object o2){ MP3 m1 = (MP3) o1; MP3 m2 = (MP3) o2; return m1.compareTo(m2); } }
26. april 2003 - 19:03
#6
hvis jeg skriver: String length1 = m1.getLength(); String length2 = m2.getLength(); får jeg fejl på length1 og length2 - derfor regnede jeg med at jeg blev nødt til at bruge int. Det er en MP3-fil som jeg skal sortere efter længede (dvs. sekunder)
26. april 2003 - 19:04
#7
Tag Arnes første svar :)
26. april 2003 - 19:04
#8
Nå du vil sortere efter længde ? Så kan du godt glemme mine sidste indlæg. Men hvis: int length1 = m1.getLength(); int length2 = m2.getLength(); virker så bør: import java.util.*; public class LengthComparator implements Comparator { public int compare(Object o1, Object o2){ MP3 m1 = (MP3) o1; MP3 m2 = (MP3) o2; int length1 = m1.getLength(); int length2 = m2.getLength(); return (length1-length2); } } også give en rigtig sortering.
26. april 2003 - 19:06
#9
jeg har lige prøvet med: return (length1-length2); og det virker - tak for hjælpen
26. april 2003 - 19:07
#10
arne v: smider du lige et svar :)
26. april 2003 - 19:08
#11
OK
26. april 2003 - 19:11
#12
lige et tillægsspg. kan du forklare hvad forskellen er på: return (length1-length2); og return length1.compareTo(length2);
26. april 2003 - 19:16
#13
Jeg kan prøve. Hvis vi kigger på dokumentation for compareTo: public int compareTo(Object o) Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object. så kan man se at: * den virker kun på objekter ikke på simple data typer * den har en funktionalitet ligesom minus for tal
26. april 2003 - 19:26
#14
jeg takker
26. april 2003 - 22:33
#15
Bør man ikke checke om der kan castes til MP3... Evt. returnere -1>>>1 hvis der ikke kan.
26. april 2003 - 22:37
#16
compareTo har lov til at throwe ClassCastException per dokumentation og jeg vil finde enhver int værdi "forkert".
26. april 2003 - 22:43
#17
rigtig. null ville være en mulighed, men om man får en ClassCast eller NullPointer kan jo være lige fedt. med equals er det lidt lettere fordi man skal returnere en boolean (der jo logisk set skal være instans af samme klasse eller en klasse der kan castes, eller obligat være falsk).
26. april 2003 - 22:46
#18
Ved equals giver false udmærket mening for ikke sammenlignelige objekter. (og man kan ikke returnere null i en int metode)
Kurser inden for grundlæggende programmering