Ich meinte zB in dem Gitter was auf der Angabe mit abgedruckt ist die Felder wo kein Kästchen für einen Buchstaben zwischen zwei Wörtern ist.
(Hoffe der Satz war irgendwie verständlich)
Jetzt versteh ich.
In der b) geht es darum ein char-Array zu erstellen, das groß genug ist um das ganze Gitterrätsel zu umfassen. Dabei geht es gar nicht um die Leerfelder, sondern um … und das möchte ich nicht direkt spoilern.
Überleg mal wie groß das char-Array sein müsste, wenn du weißt wie das gridSpec ausschaut. Am besten mit Beispielen aufm Blattpapier.
Okay dann hab ich’s schon richtig soweit. Danke ![]()
@m0kab0 Öhm Backtracking ist eine Form der Rekursion… also somit ist denke ich eine rein iterative ausführung, nicht korrekt… also irgendwo muss rekursion auftreten, sonst ist es kein backtracking. denke ich, kann mich auch irren.
Der Haken ist grün. Und nein, Backtracking ist soweit ich das verstehe keine Form von Rekursion, sonder ein allgemeines Problemlösungsverfahren. Es wird nur meißtens rekursiv umgesetzt.
Backtracking kann man auch iterativ machen, es ist meist nur schwerer. Wenn’s in der Aufgabe nicht rekursiv gefordert wurde, ist iterativ auch OK.
das heist die Puzzlesolve muss nicht sich selbst aufrufen, also eine reine Lösung mit schleifen wäre auch Richtig?
=> Lies die Aufgabenstellung genau durch (ich habe sie nicht gelesen).
Nochmal eine Frage zu a)
Was soll denn passieren, wenn eine andere logische Annahme als in den 8 Unterpunkten beschrieben verletzt wird? Soll dann ein anderer Wert zurückgegeben werden? Oder ne exception?
Bzw. konkret: wenn unter den Lösungswörtern Zahlen vorkommen, sind diese dann gültig im Sinne des Rätsels?
Und ich glaube die Eingangsfrage, ob zwischen Groß- und Kleinbuchstaben unterschieden werden soll wurde auch noch nicht beantwortet…
Servus,
soll man bei der Aufgabe b) das Array mit 0 oder ‘0’ befüllen? Bin mir da irgendwie unsicher.
RTFM:
„Alle Einträge im erzeugten char[][] -Array sollen den Wert 0 haben.“ (da steht nichts von [m]‚0‘[/m])
sowie
[m]System.out.print((field != 0 ? field : …[/m]
65 != 97 (und 48 bis 57 sind legitime [m]char[/m]-Werte ;))
Jaaaaaa… legitim, aber logisch im Sinne eines Kreuz"wort"rätsels? ![]()
Na ja, da nicht explizit steht, dass man Groß- und Kleinbuchstaben als identische Zeichen behandeln soll, hab ich’s jetzt auch gelassen. Aber irgendwie bekommt man mit jeder Woche mehr Bedenken, dass irgendwas irgendwie gemeint gewesen sein könnte, ohne dass es ausdrücklich ausformuliert wurde. Im Sinne “es könnte ja einer kommen, der das dann anders macht und DANN?!”
Hm, langsam weiß ich nicht weiter…
Ich habe das Problem, dass ich entweder nur gleiche Wörter im Rätsel bekomme, oder nur eines insgesamt… Scheinbar geht die backtracking Schleife nicht richtig weiter, wenn ich ein Wort wieder entfernt habe.
Gibt es eine Möglichkeit mir einen Tipp zu geben, ohne irgendwas zu verraten bzw. ohne meine genaue Implementierung zu kennen?
Ich hab versucht mich an das Beispiel auf der Folie zu halten, aber irgendwo hänge ich…
Ein Tipp:
Iteriere über die gegebnen Wörter und suche nach passenden Plätzen im Gitter (so auch die intuitive Idee als Mensch). Falls so ein Platz gefunden wird, fügst du das Wort ein und prüfst mit dem bearbeiteten Gitter die restlichen Wörter ab. D.h. du merkst dir welches der gegebnen Wörter du bereits benutzt hast (und ich glaube hier steckt dein Fehler).
Im Grunde ist das die Idee des Backtrackings (zum Teil).
Ufffff, endlich den Fehler gefunden. Vielen Dank für die vielen Hilfestellungen!!
setWord
Ich hätte ne Frage zu setWord.
Beim PuzzleExamples entsteht bei mir immer als Ausgabe nur ein Feld mit Punkten.
setWord verändert grid ja, gibt es aber nirgendwo zurück, also verwendet der Test immer noch das unveränderte grid.
Versteh ich da irgendwas falsch?
Arrays werden pass-by-reference uebergeben, d.h. die Aenderungen in setWord muessen nicht zurueckgeben werden, da sind bereits in dem Array selbst vornommen werden.
Schau dir folgenden Code mal an:
void foo(int[] a)
{
a[0] = 1;
}
void bar()
{
int[] array = {0};
System.out.println(array[0]); // 0
foo(array);
System.out.println(array[0]); // 1
}
Achso ok, danke ![]()
Ich hab den Fehler auch schon gefunden, war bei mir nur im Code ![]()