Binäre Suche mit Comparator

lari12

Mitglied
Hallo 🙂
wir sollen die binäre Suche mit Comparator umsetzen, die Methodendeklaration ist dabei vorgeschrieben. Den Code haben wir so ähnlich im Tutorium mit Comparable geschrieben.
Ich komme nun in der main nicht weiter.
Code:
import java.util.Comparator;

public class Search {
   
   
    public static <T> boolean sucheVonBisC(Comparator <T> c, T[] l, T w, int i, int j) {
           
       
            if (i > j) return false;
            if (i == j) return 0 == c.compare(w, l[i]);
            int m = (i+j) / 2;
            T wm = l[m];
            int comp = c.compare(w, wm);
            if (comp == 0) return true;
            if (comp < 0) // wm < w
            return sucheVonBisC(c,l,w,m+1,j);
            else
            return sucheVonBisC(c, l,w,i,m-1);
        }

    public static void main(String[] args) {

        Integer [] integers = {1,2,3,4,5};
        String w = ("Hello");
       
        sucheVonBisC(c, integers, w, 0, 5);
       
    }
}

in der letzten Zeile bekomme ich eine Error Meldung dass Integer [] nicht applicable mit T [] l ist. Dumme Frage aber ich dachte T steht für jeden Typ, warum kommt da ein Error? Ich weiß außerdem nicht was ich hier statt c einsetzen soll. :/
 
Naja in deinem Fall ist der Typ T ein Integer und Typ von w ein String. Da eigentlich beide gleich sein sollten, würgt hier der Compiler ein wenig.
 
bin inzwischen weitergekommen, aber irgendwas stimmt noch nicht.
Code:
import java.util.Comparator;


public class BiSeCo implements Comparator<Integer>{

    public int compare(Integer i1, Integer i2) {
     if (i1 > i2) {
        return 1;
    } else if (i1 < i2) {
        return -1;
    }
    else
    return 0;
    }
       
   
       
    public static <T> boolean sucheVonBisC(Comparator <T> c, T[] l, T w, int i, int j) {
           
            if (i>j) return false;
            if (i == j) return 0 == c.compare(w, l[i]);
            int m = (i+j) / 2;
            T k = l[m];
            int comp = c.compare(w, k);
            if (comp == 0) return true;
            if (comp < 0) // wm < w
            return sucheVonBisC(c,l,w,m+1,j);
            else
            return sucheVonBisC(c, l,w,i,m-1);
       
    }


    public static void main(String[] args) {
        Integer [] integers = {1,2,3,4,5};
        int w = 4;
        BiSeCo comparator = new BiSeCo();
        System.out.println(BiSeCo.sucheVonBisC(comparator, integers, w, 0, 5));
       
    }

}
 
Pack deinen Code doch in java-Code-Tags! So mag ja keiner lesen.
Und um mit deiner Antwort einen Mehrwert zu bieten solltest du schon auch schreiben WELCHES Problem du WIE gelöst hast.
 

Zurück
Oben