Hi, ich habe die Aufgabe bekommen den oben genannten Algorithmus zu implementieren. Dabei bin ich allerdings mittlerweile am verzweifeln. Ich bin allerdings schon so weit das ich den eigentlichen Algorithmus am Beispiel von Wikipedia soweit verstanden habe. 
Mein bisheriger Code :
So wie er jetzt ist, ist er kompilierbar gibt allerdings nur den Index und den char aus an dem der Text mit dem Pattern übereinstimmt, nun müsste ih theoretisch das pattern verschieben und das ist das Problem.
So wie er jetzt ist , ist er allerdings sehr statisch und quasi nur auf das im code genannte Beispiel
(text = *beispiel*) ausgelegt. Je mehr ich versuche meinen code zu verstehen desto mehr versau ich ihn
Ich bin mir sicher das es eine Möglichkeit gibt das viel kürzer, hübscher und verständlicher zu implementieren .
Und bevor die Frage kommt - Nein , ich werde nicht irgendeinen fertig geschriebenen Algorithmus verwenden.
Danke...
Mein bisheriger Code :
Java:
public class BoyerMoore {
public static void main(String[] args) {
String text = "Hoola-Hoola girls like Hooligans;";
String suchmuster = "Hooligan";
int lastIndexSuche = suchmuster.length() - 1;
int vergleichsIndex = suchmuster.length() - 1;
int characterErraten = 0;
int indexRichtigerBuchstabe = 0;
int neuerVergleichsindex;
char[] zwischenspeicherDesChars = new char[1];
int[] zwischenspeicherDesIndex = new int[1];
for (int i = lastIndexSuche; i >= 0; i--) {
if (suchmuster.charAt(i) == text.charAt(vergleichsIndex) && i == suchmuster.length() - 1) { //Wenn von anfang an alles stimmt bis zum schluss wird das wort sofort gefunden
System.out.println(suchmuster.charAt(i));
System.out.println(suchmuster.charAt(vergleichsIndex));
vergleichsIndex--;
characterErraten++;
}
if (suchmuster.charAt(i) != text.charAt(vergleichsIndex)) { //Falls er oben rausspringt wird der vergleichsindex wieder auf den letzten buchstaben gesetzt
vergleichsIndex = suchmuster.length() - 1;
}
if (suchmuster.charAt(i) != text.charAt(i) && i < 1) { // Wenn der letzte buchstabe nicht demselben entspricht wie im patter, spring raus
break;
}
if (suchmuster.charAt(i) == text.charAt(vergleichsIndex)) {
zwischenspeicherDesChars[0] = suchmuster.charAt(i); // o
zwischenspeicherDesIndex[0] = i; // 2
System.out.println(zwischenspeicherDesIndex[0]);
System.out.println(zwischenspeicherDesChars[0]);
indexRichtigerBuchstabe = i;
break;
}
}
if (characterErraten == suchmuster.length()) { // ZIEL
System.out.println("Matched");
System.exit(0);
}
neuerVergleichsindex = vergleichsIndex - indexRichtigerBuchstabe + vergleichsIndex;
}
}
So wie er jetzt ist , ist er allerdings sehr statisch und quasi nur auf das im code genannte Beispiel
(text = *beispiel*) ausgelegt. Je mehr ich versuche meinen code zu verstehen desto mehr versau ich ihn
Und bevor die Frage kommt - Nein , ich werde nicht irgendeinen fertig geschriebenen Algorithmus verwenden.
Danke...
Zuletzt bearbeitet von einem Moderator: