Hallo Zusammen,
Es geht um ein kleines Karteikarten Programm. Man erstellt am Anfang eine Karteikarte legt die Frage und die Antwort fest diese wird anschließend in einer Textdatei gespeichert.
Nun zu diesem Problem. Es ist ja relativ einfach bei einem Vokabeltrainer zu überprüfen, ob das vom User eingegebene Wort mit dem gespeicherten übereinstimmt. Nun habe ich nicht nur einzelne Wörter sondern ganze Sätze. Eine 1 zu 1 Überprüfung auf die Richtigkeit der Antwort finde ich nicht sinnvoll, denn man müsste ja auch jedes Komma und jedes Wort wieder genau so wiedergeben wie man es mal gespeichert hat.
Somit hab ich mir folgendes gedacht.
Ich habe 2 Strings.
Der Eine, der beim Erstellen der Kartei Karte als richtige Antwort angegeben wurde. Und der zweite wurde vom Benutzer als Antwort auf eine Karte eingegeben.
Ich vergleiche, ob 60% der Wörter die damals als richtige Antwort angegeben wurden in der eingegebenen Antwort enthalten sind. (anfangs hatte ich 80%)
Soweit funktioniert auch alles. Nur müsste man sehr viele Sonderfälle einbauen. Um zu vermeiden, dass bei Antworten auf die Frage
(Bsp) Wie viel ist 1 mal 1?
Antwort: 1 mal 1 ist 1 oder 1 mal 1 ist nicht eins. --> in beiden Fällen würde true raus kommen und die Antwort somit als richtig angezeigt werden.
Nun meine Frage:
Weiß jemand von euch eine alternative für dieses Problem?
Sofern ich einen Denkfehler in meinem Code habe weist mich bitte darauf hin.
Ich muss noch sagen, in dem bisherigen Code sind noch ein paar Fehler, was das verarbeiten der Sätze angeht. Es müsste noch Komma Punkte Sonderzeichen etc. entfernt werden.
Vielen Dank
edit: Betreff fällt mir leider kein besserer ein.
Es geht um ein kleines Karteikarten Programm. Man erstellt am Anfang eine Karteikarte legt die Frage und die Antwort fest diese wird anschließend in einer Textdatei gespeichert.
Nun zu diesem Problem. Es ist ja relativ einfach bei einem Vokabeltrainer zu überprüfen, ob das vom User eingegebene Wort mit dem gespeicherten übereinstimmt. Nun habe ich nicht nur einzelne Wörter sondern ganze Sätze. Eine 1 zu 1 Überprüfung auf die Richtigkeit der Antwort finde ich nicht sinnvoll, denn man müsste ja auch jedes Komma und jedes Wort wieder genau so wiedergeben wie man es mal gespeichert hat.
Somit hab ich mir folgendes gedacht.
Ich habe 2 Strings.
Der Eine, der beim Erstellen der Kartei Karte als richtige Antwort angegeben wurde. Und der zweite wurde vom Benutzer als Antwort auf eine Karte eingegeben.
Ich vergleiche, ob 60% der Wörter die damals als richtige Antwort angegeben wurden in der eingegebenen Antwort enthalten sind. (anfangs hatte ich 80%)
Soweit funktioniert auch alles. Nur müsste man sehr viele Sonderfälle einbauen. Um zu vermeiden, dass bei Antworten auf die Frage
(Bsp) Wie viel ist 1 mal 1?
Antwort: 1 mal 1 ist 1 oder 1 mal 1 ist nicht eins. --> in beiden Fällen würde true raus kommen und die Antwort somit als richtig angezeigt werden.
Nun meine Frage:
Weiß jemand von euch eine alternative für dieses Problem?
Sofern ich einen Denkfehler in meinem Code habe weist mich bitte darauf hin.
Ich muss noch sagen, in dem bisherigen Code sind noch ein paar Fehler, was das verarbeiten der Sätze angeht. Es müsste noch Komma Punkte Sonderzeichen etc. entfernt werden.
Java:
private boolean prüfeErgebnis(){
String antwort = aktuelleKarte.getAntwort(); // String von der am Anfang gespeicherten richtigen Antwort.
String antwortOhneLeerzeichen = antwort.replaceAll(" ", "");
int anzahlAntwortOhneLeerzeichen = antwortOhneLeerzeichen.toCharArray().length;
anzahlAntwortOhneLeerzeichen = ((anzahlAntwortOhneLeerzeichen* 60)/100); // Wenn 60% der Wörter richtig sind, dann true
int anzahlRichtigerBuchstaben = 0;
String antwortArea = ausgabeAntwort.getText().replaceAll(" ", " ");
antwortArea = antwortArea.replaceAll(" ", " ");
String antwortText = antwort.replaceAll(" ", " ");
String[] richtigeAntwort = antwortText.split(" "); // Die Am Anfang gespeicherte richtige Antwort.
String[] userEingabe = antwortArea.split(" "); // Die User Eingabe
int x = 0;
int stelle = 0;
while(x<userEingabe.length){ // Wort das im String gesucht werden soll
stelle = 0;
while(stelle<richtigeAntwort.length){
if(userEingabe[x].compareTo(richtigeAntwort[stelle]) == 0){
anzahlRichtigerBuchstaben = anzahlRichtigerBuchstaben +userEingabe[x].length();
break;
}
stelle++;
}
x++;
}
if(anzahlRichtigerBuchstaben > anzahlAntwortOhneLeerzeichen){
return true;
}else return false;
}
Vielen Dank
edit: Betreff fällt mir leider kein besserer ein.