Avatar billede chrede Nybegynder
14. marts 2003 - 16:18 Der er 11 kommentarer og
1 løsning

compareTo metode

Hej.
Jeg sidder med en kode hvor dette indgår:
Object _object;

public int compareTo(Object o)
{
  return (_object sammenlignet med o) //pseduo kode
}

Hvordan får jeg formuleret det som der står i min pseduo kode ??
Avatar billede chrede Nybegynder
14. marts 2003 - 16:19 #1
klassen implementere selvfølgelig Comparable ...
Avatar billede arne_v Ekspert
14. marts 2003 - 16:26 #2
Du er nødt til at vide lidt om de objekter.

Noget i retning af:

public int compareTo(Object o)
{
  return (((X)_object).getValue() - ((X)o).getValue());
}

Hvor dine objekter er af typen X som har en metode getValue
der returnerer et tal du kan sammenligne.
Avatar billede arne_v Ekspert
14. marts 2003 - 16:28 #3
Hvis getValue() returnerer et objekt kan du bruge:

public int compareTo(Object o)
{
  return ((X)_object).getValue().compareTo(((X)o).getValue());
}
Avatar billede chrede Nybegynder
14. marts 2003 - 16:32 #4
Objecterne vil være af typen Integer eller String ... og de har jo deres egne mtoder til at compare, så jeg vil egentlig bare have Integer/String klassen til at gøre det

return _object.compareTo(o); 

men det virker ikke
Avatar billede arne_v Ekspert
14. marts 2003 - 16:34 #5
Så skal du nok over i:

public int compareTo(Object o)
{
  return ((Integer)_object).compareTo((Integer)o);
}
Avatar billede chrede Nybegynder
14. marts 2003 - 16:36 #6
typecast burde ikke være nødvendigt da compareTo altid returnere int... men det virker ikke
Avatar billede arne_v Ekspert
14. marts 2003 - 16:37 #7
public class Compare {
    public static void main(String[] args) {
        Object i1 = new Integer(1);
        Object i2 = new Integer(2);
        System.out.println(((Integer)i1).compareTo((Integer)i1));
        System.out.println(((Integer)i1).compareTo((Integer)i2));
        System.out.println(((Integer)i2).compareTo((Integer)i1));
        System.out.println(((Integer)i2).compareTo((Integer)i2));
    }
}

virker !
Avatar billede arne_v Ekspert
14. marts 2003 - 16:39 #8
Jo - typecast er nødvendigt, da der ikke er nogen compareTo metode
i Object !
Avatar billede arne_v Ekspert
14. marts 2003 - 16:41 #9
Hvis Object kan være enten Integer eller String skal du
test hvad de er, altså:

public int compareTo(Object o)
{
  if(_object instanceof Integer) {
      return ((Integer)_object).compareTo(o);
  } if(_object instanceof String) {
      return ((String)_object).compareTo(o);
  } else {
      // ????
  }
}
Avatar billede chrede Nybegynder
14. marts 2003 - 16:47 #10
Jeg prøver at rode lidt videre med det... tak :-)
Avatar billede chrede Nybegynder
14. marts 2003 - 17:21 #11
Comparable _object;

public int compareTo(Object o)
{  return _object.compareTo(((Edge)o).getObject());
}

Kunne løse det :-)
Avatar billede chrede Nybegynder
14. marts 2003 - 17:22 #12
Mine objecter er af typen Edge, som du kan se
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