Avatar billede henni80 Nybegynder
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);
    }   
}
Avatar billede erikjacobsen Ekspert
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?
Avatar billede arne_v Ekspert
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);
    } 
}
Avatar billede arne_v Ekspert
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);
    } 
}
Avatar billede arne_v Ekspert
26. april 2003 - 19:02 #4
Ja så skal metoden jo nok have et andet navn også.

:-)
Avatar billede arne_v Ekspert
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);
    }
}
Avatar billede henni80 Nybegynder
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)
Avatar billede erikjacobsen Ekspert
26. april 2003 - 19:04 #7
Tag Arnes første svar :)
Avatar billede arne_v Ekspert
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.
Avatar billede henni80 Nybegynder
26. april 2003 - 19:06 #9
jeg har lige prøvet med: return (length1-length2);
og det virker - tak for hjælpen
Avatar billede henni80 Nybegynder
26. april 2003 - 19:07 #10
arne v: smider du lige et svar :)
Avatar billede arne_v Ekspert
26. april 2003 - 19:08 #11
OK
Avatar billede henni80 Nybegynder
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);
Avatar billede arne_v Ekspert
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
Avatar billede henni80 Nybegynder
26. april 2003 - 19:26 #14
jeg takker
Avatar billede =maddog= Nybegynder
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.
Avatar billede arne_v Ekspert
26. april 2003 - 22:37 #16
compareTo har lov til at throwe ClassCastException per dokumentation
og jeg vil finde enhver int værdi "forkert".
Avatar billede =maddog= Nybegynder
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).
Avatar billede arne_v Ekspert
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)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester