10 Fingersystem-Lernprogramm

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Hi, arbeite gerade an nem 10 Fingersystem-Lernprogramm und stehe vor einem Problem. Ich habe einen vorgabetext (dasMuss) und einen Eingabetext (text). Wenn der User jetzt einen Buchstaben eingibt, der nicht an dieser Stelle (soweit) im Vorgabetext steht, soll der Buchstabe nicht dargestellt werden. Momentan löse ich dass, indem ich einfach den letzten wieder remove. Das funktioniert auch nur bekomme ich jedes mal eine ArrayOutOfBoundsException und ich hab keine Ahnung warum!? Hier der Code:

Code:
public void keyTyped(KeyEvent key) {
	if (soweit != dasMuss.getText().length()) {
		if(key.getKeyChar() != dasMuss.getText().charAt(soweit)) {
			text.remove(soweit);
		}
		else {
			soweit++;
		}
	}
	else {
		text.remove(soweit);
	}
}
 

mic_checker

Top Contributor
Der User muss also letztendlich den korrekt vorgegebenen Text eingegeben haben, bis er weiter machen kann (mit nem neuem Text z.B.) oder?

Was ist "text" bei dir?
 

mic_checker

Top Contributor
Das meinte ich nicht ;)

Ein String,Textfeld,Textarea etc. ?

Btw. das hier sieht schon verdächtig aus:

Code:
if (soweit != dasMuss.getText().length())
..

Weiss jetzt net genau was dein "text" ist, aber wahrscheinlich kommt ne Überschreitung bei ArrayIndexOutOfBounds oder?
 

mic_checker

Top Contributor
Warum machst du es nicht so:

Ist die Eingabe korrekt wird das Zeichen ans Ende der JTextArea angehangen , ansonsten machst du nichts...

Du willst mit remove das Zeichen an einer best. Stelle "löschen" oder? Afaik erbt JTextArea eine Methode remove von Container/Component, diese ist aber nicht zum entfernen von Zeichen gedacht.
 

mic_checker

Top Contributor
Ach quatsch, was red ich denn...das kannst du nur mit anhängen machen wenn du ne separate JTextArea holen würdest, zumindest würde es dann nur Sinn machen.

Ansonsten müsstest du wohl über setText() arbeiten.
 

The_S

Top Contributor
Das ist ja fast so unschön wie meine Methode :wink: . Gibts da nicht noch ne andere Möglichkeit?
 

The_S

Top Contributor
Das is es ja! Ich verwende kein Array ???:L . Code ist nicht arg viel mehr momentan, da ich erst in der Testphase bin.
 

mic_checker

Top Contributor
Ich denke die Exception wird ausgelöst weil er mit remove (von Component/Container) versucht eine Komponente zu entfernen, aber er möchte ja das entsprechende Zeichen entfernen. So denke ich das zumindest mal...
 

The_S

Top Contributor
Code:
text.replaceRange("", soweit, soweit + 1);

Stack Trace?
 

mic_checker

Top Contributor
Stack Trace ist in dem Fall nicht nötig, da du die entsprechende Zeile ja alleinstehend gepostet hast - damit meinte ich nur die genaue Fehlermeldung.

Du versuchst nen "illegalen Bereich" zu markieren, z.B. dein Textfeld hat nur 3 Zeichen und du versuchst den Bereich 7-8 durch "" zu ersetzen.

Dein somit ist also fehlerhaft.

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTextArea.html#replaceRange(java.lang.String,%20int,%20int)

Beachte: der zweite Parameter ist >= 0.

Hab oben in deiner Bedingung ja schon gesagt das da wohl auch was nicht stimmt, schau dir die Bedingung nochmal an.

Notfalls lass dir die Werte von somit ausgeben damit du weisst was genau falsch läuft.
 

The_S

Top Contributor
Hab ne Lösung gefunden!!!

Code:
text.replaceRange("", text.getText().length() - 1, text.getText().length());
 

The_S

Top Contributor
Nö, geht leider doch net :cry: , wird zwar keine Exception mehr geworfen, funzt aber net immer so, wie es soll
 

mic_checker

Top Contributor
Du hast es jetzt in keyTyped() oder? Versuch das mal mit keyReleased(). Wenn du schnell genug tippst führt das aber immer noch zu Fehlern.
 

The_S

Top Contributor
Jo, für Turbotipper is das nix. Aber das muss doch irgendwie gehen (ich könnts ja in nen String speichern und dann da den letzten Buchstaben ersetzen und dann wieder ins JTextArea, aber bevor ich das mach, fang ich lieber einfach die Exception und geb nix aus :wink: ), bin doch sicherlich nicht der 1. der sowas probiert!
 

mic_checker

Top Contributor
Habs kurz testweise bei mir mit keyRelease probiert und dort deinen replaceRange, hat gefunzt, nur halt net für Turbotipper ;)

Die brauchen das Prog ja eh nicht mehr benutzen *g*
 

The_S

Top Contributor
Is aber nicht schön, wenn der User aus versehen mal auf ner Taste einschläft und dadurch ein Fehler im Programm findet :wink:
 

Wildcard

Top Contributor
Du kannst auch das Textfeld in ein Panel legen, den KeyListener auf das Panel, das Panel fokusieren und
damit alle Eingaben abfangen... :wink:
 
R

Roar

Gast
häng doch einfach ein eigenes Document an deine JTextArea. siehe dazu in der FAQ
 

The_S

Top Contributor
OK, danke! Funktioniert jetzt soweit. Jetzt komme ich aber zum nächsten Problem! Natürlich soll auch ein Text einfach so geschrieben werden können. Dazu gibts dann auf Wunsch noch eine Vorlage. Wenn der Text beendet ist möchte ich jetzt überprüfen, wie viele Fehler gemacht wurden. Ich hab aber keine Ahnung, wie ich das machen könnte. Man könnte zwar die einzelnen Zeichen des Eingabetextes und des Ausgabetextes vergleichen, aber sobald dann ein Buchstabe zu viel oder zu wenig vorkommt, sind alle darauf folgenden Buchstaben auch falsch! Hat da jemand eine Idee?
 

mic_checker

Top Contributor
Du liest zuerst natürlich komplett, ohne jegliche überprüfungen den eingegebenen text ein.

dann könntest du ja z.B. in ner for schleife den ursprünglichen text durchgehen ("Buchstabenweise") mit einer Zählvariable und den eingegebenen Text mit ner andern Zählvariable, wenn der Buchstabe an Stelle 0 mit dem eingegebenen Buchstaben an Stelle 0 übereinstimmt, inkrementiere die beiden Zählvariablen und geh weiter zu Buchstabe 1.
Wenn ein Fehler auftritt inkrementiere nur die Zählvariable des eingegebenen Textes (und die Anzahl der Fehler).

Hoffe du verstehst was ich meine, ansonsten versuch ich noch etwas Code zu posten.
 

The_S

Top Contributor
Jo, versteh ich! Genial! Bin zwar noch nicht an dieser Stelle angekommen (hab die Frage einfach mal vorab gestellt :wink: ), geb aber bescheid obs funktioniert hat oder nicht.
 

mic_checker

Top Contributor
Gut ;)

Du müsstest nach der For Schleife aber noch eine Bedingung überprüfen.

Beispiel:
-----------

Original = Hallo Welt
Input = Hallo

Wenn du es so machst wie oben meldet er u.U. keinen Fehler, deshalb musst du noch den Wert der Zählvariable des Original Textes überprüfen.
In diesem Fall müssen ja 5 Fehler rauskommen.

Dies könnte evtl. so gehen:

Code:
		if(i < original.length())
			fehler += (original.length() - i);
i = Zählvariable von Original
fehler = Anzahl Fehler
original = Original Text
 

mic_checker

Top Contributor
Allerdings gibt es bei dem bisherigen Ansatz ein Problem.

Beispiel:
Code:
		String input = 	"Hallo welt";
		String original = "hallo welt";

Vergleichst du einfach nur so buchstabenweise, erhälst du hier viele Fehler, deshalb müsstest du noch einen Fall beachten.

Wenn Buchstabe an Stelle i in beiden Texten sich nur in Groß/Kleinschreibung unterscheiden, zähle beide Zählvariablen hoch, sowie die Fehlervariable, damit kriegst du oben nämlich korrekt raus : 1 Fehler.
 

The_S

Top Contributor
Bin immernoch nicht so weit, hab momentan zu viel zu tun :wink: . Geb dann die Lösung, wenn ich eine hab oder frag nochmal nach
 

The_S

Top Contributor
So, jetzt stehe ich vor dem Problem. Und das ist wirklich gar nicht so leicht. Ich muss beachten, dass

- Buchstaben zu viel sind
- Buchstaben zu wenig sind
- an gewissen Stellen Buchstaben zu viel und an anderen wieder zu wenig sein können, so dass ich mich auch nicht darauf verlassen kann, dass wenn die Länge der beiden Strings übereinstimmt, auch keine zu vielen oder zu wenigen Zeichen vorkommen
- ein Buchstabe vertauscht wurde
- mehrere Buchstaben hintereinander vertauscht wurden
- ein Buchstabe vertauscht wurde, dann ein Buchstabe zu viel oder zu wenig, dann noch ein vertauscher
- ...

sehr komplex das Ganze. Da kennt nicht jemand zufällig einen Algorithmus oder so was?
 

The_S

Top Contributor
Hab da mal nen Ansatz, nur funktioniert der nicht immer ???:L , aber meistens. Wie kann ich das Ding verbessern, so dass es immer funktioniert? Ich brauche einzig und allein die Anzahl der Fehler, nicht wo sie sich befinden.

Code:
	static int differenz(String str1, String str2)  {
		
		int str1F = 0; 
		int str2F = 0; 
		int fehler = 0; 
		int lange = 0; 
		boolean fertig = false; 
		if (str1.length() <= str2.length()) { 
			lange = str1.length() - 1; 
		} 
		else { 
			lange = str2.length() - 1; 
		} 
		if (str1.length() > str2.length()) {
			fehler = str1.length() - str2.length();
		}
		else {
			fehler = str2.length() - str1.length();
		}
		for (int i = 0; i < lange && fertig == false; i++) { 
			if (str1.charAt(str1F) != str2.charAt(str2F) && fertig == false) { 
				int soweit = 0; 
				int test1 = str1F; 
				int test2 = str2F; 
				fehler++; 
				try { 
					while (str1.charAt(test1) != str2.charAt(test2) && fertig == false) { 
						soweit++; 
						if (test1 + soweit + 1 >= lange) { 
							fertig = true; 
						} 
						if (str1.charAt(test1) != str2.charAt(test2) && fertig == false) { 
							for (int durch = 0; durch != soweit; durch++) { 
								test1++; 
								test2++; 
							} 
						} 
						if (str1.charAt(test1) != str2.charAt(test2) && fertig == false) { 
							test1 = str1F; 
							test2 = str2F; 
							for (int durch = 0; durch != soweit; durch++) { 
								test1++; 
							} 
						} 
						if (str1.charAt(test1) != str2.charAt(test2) && fertig == false) { 
							test1 = str1F; 
							test2 = str2F; 
							for (int durch = 0; durch != soweit; durch++) { 
								test2++; 
							} 
						}    
					} 
				} 
				catch (Exception e) { 
				} 
				str1F = test1; 
				str2F = test2; 
			} 
			str1F++; 
			str2F++; 
			if (str1F >= lange || str2F >= lange) { 
				fertig = true; 
			} 
		} 
		return fehler; 
	}
 

mic_checker

Top Contributor
Hi,
also ich hab gerad nicht meine Sources griffbereit, aber werd ich nachholen.

Hast du meinen Beitrag oben mal durchgelesen ?

Ich würde an deiner Stelle mit zwei Zählvariablen arbeiten (sowie einer Fehlervariablen), je nach Situation beide oder nur eine Zählvariable inkrementieren.

Btw. wann ist die Fehleranzeige denn fehlerhaft (in welchen Situationen: Text zu kurz,zu lang etc.) ?
 

The_S

Top Contributor
Jo, hab deinen Beitrag gelesen. Benutze doch zwei Zählvariablen!? ???:L . Hab das jetzt nochmal überarbeitet. Bekomme Fehler, wenn viele Zeichen (oder ein paar am Ende) fehlen. Hier der überarbeitete Code:

Code:
	static int differenz(String str1, String str2)  {
		
		str1 = str1.replaceAll("\n", " \n") + " ";
		str2 = str2.replaceAll("\n", " \n") + " ";
		int str1F = 0; 
		int str2F = 0; 
		int fehler = 0; 
		int lange = 0; 
		boolean fertig = false; 
		if (str1.length() <= str2.length()) { 
			lange = str1.length(); 
		} 
		else { 
			lange = str2.length(); 
		}
		try {
			for (int i = 0; i < lange && fertig == false; i++) { 
				if (str1.charAt(str1F) != str2.charAt(str2F) && fertig == false) { 
					int soweit = 0; 
					int test1 = str1F; 
					int test2 = str2F; 
					fehler++; 
					while (str1.charAt(test1) != str2.charAt(test2) && fertig == false) { 
						soweit++; 
						if (test1 < lange && test2 < lange) {
							if (str1.charAt(test1) != str2.charAt(test2) && fertig == false) { 
								for (int durch = 0; durch != soweit; durch++) { 
									test1++; 
									test2++; 
								} 
							}
						}
						if (test1 < lange && test2 < lange) {
							if (str1.charAt(test1) != str2.charAt(test2) && fertig == false) { 
								test1 = str1F; 
								test2 = str2F; 
								for (int durch = 0; durch != soweit; durch++) { 
									test1++; 
								} 
							}
						}
						if (test1 < lange && test2 < lange) {
							if (str1.charAt(test1) != str2.charAt(test2) && fertig == false) { 
								test1 = str1F; 
								test2 = str2F; 
								for (int durch = 0; durch != soweit; durch++) { 
									test2++; 
								} 
							}    
						} 
						else {
							fertig = true;
						}
					}
					str1F = test1;
					str2F = test2;
				}
				str1F++; 
				str2F++;
				if (str1F >= lange || str2F >= lange) { 
					fertig = true; 
				}
			} 
		}
		catch (Exception e) {
			System.out.println(e);
			fehler = -1;
		}  
		return fehler; 
	}

Bekomme ne StringIndexOutOfBoundsException (is ja auch das einzig logische :wink: )
 

mic_checker

Top Contributor
sorry, habs ganz übersehen das du zwei hast ;)

Du benutzt eine Längenangabe und zwei Zählvariablen, beim kleineren/kürzeren String verursacht das irgendwann logischerweise ne OutOfBounds, deshalb solltest du zwei Längenangaben kontrollieren, der eine geht nur bis Ende vom ersten String , der ande bis Ende vom anderen.

Ich hab meinen Code noch mal gefunden, funktioniert manchmal ganz gut (manchmal auch nicht ;)), gibt u.a. Probleme wenn die Texte unterschiedlich lang sind....Werde bei Gelegenheit noch versuchen Fehler auszumerzen etc.

Code:
		String input = "hAlLo WelT";
		String original = "Hallo welt";
		
		int fehler = 0;
		int i = 0;
		int j = 0;
		
		for(;i < original.length() && j < input.length();) {
			if(input.charAt(j) == original.charAt(i))
				i++;
			else if(Character.toLowerCase(input.charAt(j)) == Character.toLowerCase(original.charAt(i))) {
				i++;
				fehler++;
			} else
				fehler++;
			
			j++;
		}
		
		if(i < original.length())
			fehler += (original.length() - i);

Es sei noch gesagt: Der Code funzt nicht fehlerfrei, also eher als Ergänzung oder weiteres Beispiel sehen ;)
 

The_S

Top Contributor
Kannst mir mal verraten, warum dein Code so verdammt viel kürzer ist!? :x ???:L :wink: . Und wenn du schonmal am erklären bist, kannst mir mal sagen wie dein Code funktioniert? Büüüüüüüüüüüüüüüddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee ... :wink: . Der Code ist mir nämlich eindeutig zu kurz :bae: :autsch:
 

mic_checker

Top Contributor
Also er ist kürzer, funktioniert dafür in einigen Fällen auch net ;)

Das Prinzip:

Du hast den Original String und den eingegebenen String.

Im Optimalfall sind die beiden gleich, bis auf groß/kleinschreibungs unterschiede.

Wie geht das Prog vor?

Es vergleicht die ersten beiden Buchstaben, wenn beide gleich sind gehts weiter und er vergleicht jeweils die zweiten. Wenn sich die beiden ersten Buchstaben nur in Groß/Kleinschreibung unterscheiden geht er auch weiter, zählt allerdings die Fehlervariable hoch, wenn sie sich ganz unterscheiden zählt er die Zählervariable des einen Strings hoch und die Fehlervariable.

Beispiel:

Code:
		String input = 	"Haaallo";
		String original = "Hallo";
habe extra ein beispiel gewählt wo es denn mal klappt ;)

H -> H beide gleich also geh weiter
a -> a beide gleich ....
a -> l ungleich, geh weiter in input, zähl fehler hoch
a -> l ungleich, ....
l -> l gleich , geh weiter
l -> l gleich ...
o -> o gleich...

Fehler = 2

In einigen Fällen gibts mit diesem Ansatz so aber Probleme, ganz trivialer Fall:

Original = Hallo
Eingabe = t

H != t , zählt Fehler also hoch , nachher kontrolliert er den Wert der Zählvariable und packt noch die zusätzlichen Fehler drauf, so dass 6 Fehler entstehen....obwohl du wahrscheinlich hier 5 Fehler haben willst....

Das Problem ist aber interessant ;) Werde versuchen da dran irgendwie weiter zu arbeiten.
 

The_S

Top Contributor
Wenn ich mein

Code:
fehler++

in meine while-Schleife schreibe, hab ich den Vorteil, dass jeder Fehler gezählt wird (auch wenn zwei Fehler hintereinander auftreten). Nur stellt sich jetzt ein anderes Problem: Was mache ich bei einem solch speziellen Fall, wenn z. B. statt

"Fehler"

"Fler"

geschrieben wurde? Dann wird versucht ob es wieder stimmt, wenn man beide um ein Zeichen vorsetzt (h und e), trifft nicht zu, 2. Versuch den Eingabetext um ein Zeichen vorsetzten (e, e) Fehler (angeblich) gefunden, weiter gehts. Nur dass stimmt ja nicht, da nur Zufällig das e nochmal auftritt. Das ganz scheint mir jetzt extrem komplex zu werden ... Am einfachsten wäre es ja, wenn ich einfach pro Wort nur einen Fehler zulassen würde, aber das wäre ja langweilig :bae: :wink: . Jemand ne Idee?

[edit] @mic_checker hast gepostet, als ich auch gepostet hab. Was mich interessiert, funktioniert dein Code an dem von mir geschildertem Problem? Und funktioniert er, wenn ein Buchstabe vergessen wurde?
 

mic_checker

Top Contributor
Nein, habe ich auch direkt getestet, das Problem ist scheinbar etwas schwieriger als ich anfangs dachte, das muss ich schon zugeben...ich könnte meinen Ansatz auch dahingehend umstellen das er diesen Fall erkennt, aber dann macht es wieder in anderen Fällen Probleme, was ja nicht im Sinne des Erfinders sein kann.

Kamst du mit (Java) Diff weiter ?
 

The_S

Top Contributor
Ich weiß. Hab das Problem auch unterschätzt. Entweder werden zwei oder mehr Fehler hintereinander nicht erkannt, oder es kommt in bestimmten Fällen zu komplexen Situationen bei der der aktuelle Algorithmus versagt. Die Sache mit dem wenn Buchstaben zu viel oder zu wenig sind bearbeitet mein jetztiges Programm, nur wird in diesem Beispiel ein Buchstabe zu wenig angezeigt und ich hab keine Ahnung warum:

Originaltext: "wird es weißen"
Eingabetext: "wird swie"

Hier werden nur 4 Fehler erkannt obwohl es eigentlich 5 seien sollten (wird _s_w_i_e_) Schreibe ich allerdings "wird eswie" wird alles korrekt ausgegeben. Da ich mir nicht ganz sicher bin, ob mein Code noch aktuell ist poste ich nochmal den Code :wink:

Code:
    static int differenz(String str1, String str2)  {
		
		str1 = str1.replaceAll("\n", " \n") + " \n";
		str2 = str2.replaceAll("\n", " \n") + " \n";
		int str1F = 0; 
		int str2F = 0; 
		int fehler = 0; 
		int lange = 0; 
		boolean fertig = false; 
		if (str1.length() <= str2.length()) { 
			lange = str1.length(); 
		} 
		else { 
			lange = str2.length(); 
		}
		try {
			for (int i = 0; i < lange && fertig == false; i++) { 
				if (str1.charAt(str1F) != str2.charAt(str2F) && fertig == false) { 
					int soweit = 0; 
					int test1 = str1F; 
					int test2 = str2F; 
					fehler++; 
					while (fertig == false && str1.charAt(test1) != str2.charAt(test2)) { 
						soweit++; 
						if (test1 < lange && test2 < lange) {
							if (str1.charAt(test1) != str2.charAt(test2) && fertig == false) { 
								for (int durch = 0; durch != soweit; durch++) { 
									test1++; 
									test2++; 
								} 
							}
						}
						if (test1 < lange && test2 < lange) {
							if (str1.charAt(test1) != str2.charAt(test2) && fertig == false) { 
								test1 = str1F; 
								test2 = str2F; 
								for (int durch = 0; durch != soweit; durch++) { 
									test1++; 
								} 
							}
						}
						if (test1 < lange && test2 < lange) {
							if (str1.charAt(test1) != str2.charAt(test2) && fertig == false) { 
								test1 = str1F; 
								test2 = str2F; 
								for (int durch = 0; durch != soweit; durch++) { 
									test2++; 
								} 
							}    
						} 
						if (test1 >= lange || test2 >= lange) {
							fertig = true;
						}
					}
					str1F = test1;
					str2F = test2;
				}
				str1F++; 
				str2F++;
				if (str1F >= lange || str2F >= lange) { 
					fertig = true; 
				}
			} 
		}
		catch (Exception e) {
			System.out.println(e);
		}
		return fehler; 
	}
 

The_S

Top Contributor
Mir ist da noch was eingefallen ... weiß nur noch nicht wie ichs einsetz bzw. umsetzen kann. Leider weiß ich aber auch noch nicht ob es überhaupt nützlich ist ???:L :? :roll: . Man könnte doch den Fehlerzähler erhöhen und dann den falschen Buchstaben

a) durch den Richtigen ersetzen

b) löschen

c) vorher den Richtigen einfügen

jenachdem woran es liegt. Dann weitervergleichen. Das würde zumindest mal das Problem lösen, dass ich bei zu wenigen (oder zuviel) Buchstaben Schwierigkeiten bekomme. Und ich denke es kann auch anderweitig nütlich sein. Ich weiß nur noch nicht wie :bae: :wink: :autsch: .
 

mic_checker

Top Contributor
Durch die Korrektur wird es imho nicht immer einfacher. Zumindest ist es wohl nicht einfach das ganze korrekt und praktisch umzusetzen.

Oder kannst du mal an einem ausführlichen Beispiel zeigen wie du das umsetzen willst? Deine Idee ist mir schon klar, frag mich gerade nur ob es was bringt zur Lösung des Problems.
 

Wildcard

Top Contributor
Ich abstrahier das ganze mal etwas:
Die korrekt Fehlerzahl währe also die minimal nötige Anzahl von Operationen um aus einem beliebigen String einen anderen zu machen. Als eine Operation gilt hier
- Buchstabe einfügen
- Buchstabe löschen
- Buchstabe ändern

soweit korrekt?
Ratschlag von mir:
lass es sein, das kriegst du nicht hin! :wink:
Wie willst du einen Algorithmus schreiben der erkennt das es sinnvoller ist an Stelle 14 einen Buchstaben zu ändern,
da er dann die 5 davor einfach weiterschieben kann, anstatt alle Buchstaben zu änder... :autsch:
Die einzige Methode die mir jetzt einfallen würde ist alle Möglichkeiten zu testen und die Günstigste zu
nehmen(was alles andere als trivial ist).
Und wenn du das tatsächlich versuchst hast du ein exptime Problem und wirst während dein PC rechnet
viel zeit haben um über dein nächstes Projekt nachzudenken :lol:
Mach Einschränkungen:
-Man kann nur 2 Buchstaben verdrehen
-Man kann nur einen Buchstaben zuviel oder zu wenig schreiben, der nachfolgende muss dann aber korrekt sein
Wirklich korrekt wirst du's nicht schaffen...
 

The_S

Top Contributor
diff kann das doch auch. Ich hab schon gesucht, aber nirgends was gefunden, was AUSFÜHRLICH beschreibt, wie diff funktioniert. Es muss also irgendwie funktionieren. Oder sehe ich da was falsch?
 

Wildcard

Top Contributor
Meinst du sowas?
Hab mir das jetzt nur kurz angesehen, aber der Alogrithmus entstammt einem eigenen Buch über diese Art
Algorithmus, also von jemandem der sich sehr lange damit beschäftigt hat Lösungen für genau dieses Problem
zu finden. Wie im Comment vermerkt wurde erziehlt der verlinkte Algorithmus kürzere Änderungslisten als das
Orginal, was bedeutet das beide nicht-deterministisch sind, also nicht unbedingt die beste Anzahl an Änderungen
liefern. Wie hoch schätzt du jetzt deine Chancen ein das Problem korrekt zu lösen? :wink:
 

The_S

Top Contributor
Boah, des is ja dermaßen unlerserlich geschrieben ... Aber ich habe eine andere Idee:
Ich gehe den Text wie bisher durch + dass die Fehler korrigiert werden (kann ja abfragen, was genau falsch gemacht wurde), sobald das 1. Vorgabe Wort vollständig überprüft wurde, wird es mit dem 1. Eingabe Wort verglichen. Stimmt das überein, wird bei der Vorgabe und der Eingabe das 1. Wort entfernt und es geht ganz normal weiter. Stimmt es aber nicht überein, gehe ich die ganze Schleife mit dem original eingegebenen Wort nochmal durch, und teste, ob es bei dem 1. Buchstaben noch eine andere Korrekturmöglichkeit gibt (z. B. bei dem "Fehler" "Fler"). Funzt das auch net, wird der 2. überprüft usw. Stimmt dann das Eingabewort mit dem Vorgabewort überein geht es weiter im Text. Eigentlich müsste das doch funktionieren!? Oder habe ich da einen Denkfehler?
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben