Avatar billede interkriller Nybegynder
11. september 2006 - 09:13 Der er 4 kommentarer og
1 løsning

Søgning vha COMPARATOR

Jeg har følgende kode:

********************************************

import java.util.*;

interface COMPARATOR<T>{
    int compare (T o1, T o2);
}

interface BINARYSEARCH<T> {
    public <T> int search (ArrayList <? extends T> l,
                  T key,
                  COMPARATOR <? super T> c);
    /* Invariant: l is a sorted list */
}

class Comparator implements COMPARATOR<String> {
    public int compare (String s1, String s2) {return s1.compareTo (s2);}
}

class BinarySearch {
    static public void main (String[] args) { 
    ArrayList<String> list = new ArrayList<String> ();
    list.add ("Anton");
    list.add ("Berta");
    list.add ("Carsten");
    }
}

*******************************************

Jeg skal lave search metoden, men har ikke det store kendskab til java syntax.

Mit foreløbige forsøg ser ud som følgende:

*******************************************


import java.util.*;

interface COMPARATOR<T>{
    int compare (T o1, T o2);
}

interface BINARYSEARCH<T> {
    public <T> int search (ArrayList <? extends T> l,
                  T key,
                  COMPARATOR <? super T> c);
    /* Invariant: l is a sorted list */
}

class Comparator implements COMPARATOR<String> {
    public int compare (String s1, String s2) {return s1.compareTo (s2);}
}

class BinarySearch{
    static public void main (String[] args)
    { 
    ArrayList<String> list = new ArrayList<String> ();
    list.add ("Anton");
    list.add ("Berta");
    list.add ("Carsten");
    list.add ("Dennis");
    list.add ("Elisabeth");
    list.add ("Frank");
    list.add ("Grooom");

    search(list, "Carsten", Some_ref_to_a_comparator);
    }
   
    public int search (ArrayList l, String key, Comparator c) // 'key' must be equal to an element in 'l'
        {
        int left = 0;
        int right = l.size()-1;
        int currentLookAt;
           
        do
        { 
            currentLookAt = ((left+right)/2);           
            if (c.compare(key, (String)l.get(currentLookAt))<0)
            {
            right = currentLookAt;
            }
            else //Search string is "larger" than the current index
            {
            left = currentLookAt;
            }   
        }while (c.compare(key, (String)l.get(currentLookAt)) != 0);
           
        return currentLookAt;
    }
}

******************************************************

Jeg er i tvivl om jeg overhovedet er startet korrekt, så lidt feedback ville være rart.
Det virker underligt at skulle sende Comparator med som argument.
Avatar billede mr_chaos Praktikant
11. september 2006 - 14:53 #1
Kunne du ikke bare bruge
Arrays.binarySearch eller Collections.binarySearch ?
Avatar billede jakoba Nybegynder
11. september 2006 - 15:45 #2
mr_chaos >> det lyder som en skoleopgave. Han kan ikke bare ignorere opgavens parametre og gøre noget helt andet.

Prøv at kikke nærmere på:
  interface BINARYSEARCH<T> {
      public <T> int search (ArrayList <? extends T> l,
                    T key,
                    COMPARATOR <? super T> c);
      /* Invariant: l is a sorted list */
  }
den giver reglerne.
1) din arratlist kan indoholde objekter af enhver klasse der er en T eller en extension af klassen T
2) din comparator skal være et objekt af typen T eller en superklasse til T

Så for at overholde de regler må du gøre dig klart hvilken af dine klasser der er T og overholder de regler. Hvis ingen af de klasser du har er gyldig som T-klasse kommer du til at lave en selv.
Avatar billede interkriller Nybegynder
11. september 2006 - 19:47 #3
takker for svarene, men fik løst problemet ved at instantiere "BinarySearch" med <String> Uden for main loopet, og så gik det hak i hak derfra.

Er lidt glad for det endeligt virker, så jeg vil smide lidt point efter nogen, og den "nogen" bliver jakoba....smider du lige et svar :)
Avatar billede jakoba Nybegynder
11. september 2006 - 20:30 #4
Det går vist ikke, for mit svar var jo forkert :-))
Jeg skal åbenbart også læse noget mere på letien før jeg rigtig forstår de der templates.

så svar og tag dem selv. Du skal nok finde noget at bruge dem til :)
Avatar billede interkriller Nybegynder
12. september 2006 - 13:54 #5
Bare iorden...men tak for forsøget anyway :D
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