Kreuzworträtsel

joh.

Mitglied
Hi ich habe ein paar Schwierigkeiten beim Schreiben eines Programms.
Ich versuche die Aufgabenstellung knapp zu formulieren und zwar wollte ich ein Programm schreiben, welches mir ermöglicht ein "Kreuzworträtsel" in Form eines zweidimensionalen Arrays auf ein bestimmtes Wort zu durchsuchen. Ich habe versucht das Rätsel in Horizontaler, Vertikaler und Diagonaler Richtung zu durchsuchen. Außerdem habe ich versucht die Anzahl des im Rätsel vorkommenden Wortes jeweils in Horizontaler, Vertikaler und Diagonaler Richtung zu zählen und auszugeben, jedoch Streikt mein Programm und liefert nicht das gewünschte Ergebnis, könnt ihr mir evtl weiterhelfen.

Dankeschön



//Programm

public class Kreuzwortraetsel
{

public static void main(String[] args)

{

char [][] raetsel =
{
{'Q', 'W', 'J', 'A', 'V', 'A', 'J'},
{'R', 'T', 'K', 'V', 'A', 'L', 'A'},
{'M', 'J', 'J', 'Z', 'C', 'V', 'V'},
{'N', 'X', 'Y', 'A', 'P', 'B', 'A'},
{'T', 'L', 'K', 'S', 'V', 'E', 'D'},
{'M', 'T', 'V', 'Q', 'R', 'A', 'S'},
{'Y', 'J', 'A', 'V', 'A', 'V', 'B'}
};

int n = 0;
System.out.println(CharMatrix.toString(raetsel));

String word = "JAVA";

//Horizontal
System.out.println("Das Wort " + word + " ist " + n + " mal in Horizontaler Richtung enthalten" + (searchHorizontal(raetsel, word, n)));

//Vertikal
System.out.println("Das Wort " + word + " ist " + n + " mal in Vertikaler Richtung enthalten" + (searchVertikal(raetsel, word, n)));

//Diagonal
System.out.println("Das Wort " + word + " ist " + n + " mal in Diagonaler Richtung enthalten" + (searchDiagonal(raetsel, word, n)));





}


public static int searchHorizontal(char[][] raetsel, String word, int n)

{
for(int i = 0; i < raetsel.length - 1; i++)
for(int j = 0; j < raetsel.length - 1; j++)
{
int k=0;

while (k < word.length() && raetsel [j+k] == word.charAt(k))
k++;
if(k == word.length())
{
n++;
continue;
}
}
return n;


}

public static int searchVertikal(char[][] raetsel, String word, int n)

{
for(int i = 0; i < raetsel.length -1; i++)
for(int j = 0; j < raetsel.length -1; j++)
{int k=0;

while (k < word.length() && raetsel [i+k][j] == word.charAt(k))
k++;
if(k == word.length())
{
n++;
continue;
}


}
return n;


}

public static int searchDiagonal(char[][] raetsel, String word, int n)

{
for(int i = 0; i < raetsel.length -1; i++)
for (int j = 0; j < raetsel.length; j++)
{
int k=0;

while (k < word.length() && raetsel [i+k][j+k] == word.charAt(k))
k++;
if(k == word.length())
{
n++;
continue;
}


}


return n;
}

}

//Programm ende
 

njans

Top Contributor
Java:
System.out.println(CharMatrix.toString(raetsel));
Was soll CharMatrix sein?
 

joh.

Mitglied
Also mit System.out.println(CharMatrix.toString(raetsel)); gebe ich das Array "rätsel" aus.


Mein konkretes Problem ist, ich will ein programm schreiben welches, wie vorher gesagt 1. überprüft ob "JAVA" enthalten ist und 2. wie oft es enthalten ist. Mein Programm findet jedoch nur ein mal "JAVA" obwohl ich bewusst ein eigenes "Rätsel" erstellt habe und nicht mit der random funktion eine zufallsmatrix erstellt habe und so eben weiß, dass java in horizontaler richtung 2 mal, in vertikaler richtung 1 mal und in diagonaler richtung 1 mal enthalten ist. ich weiß aber nicht wo mein fehler im code ist.
 

njans

Top Contributor
Java:
//Horizontal
System.out.println("Das Wort " + word + " ist " + n + " mal in Horizontaler Richtung enthalten" + (searchHorizontal(raetsel, word, n)));

//Vertikal
System.out.println("Das Wort " + word + " ist " + n + " mal in Vertikaler Richtung enthalten" + (searchVertikal(raetsel, word, n)));

Du gibts ja auch n aus, was du vorher mit 0 initialisiert hast. In Java ist int ein primitiver typ, da hast du keine Referenz drauf.
Wenn du also in deiner Methode n übergibst und das veränderst, dann macht das an einem n da gar nichts.
Beide such Methoden haben jeweils einen Rückgabewert, speichere den mal und gib diesen dann aus.
 

joh.

Mitglied
[JAVA=42]//Horizontal
System.out.println("Das Wort " + word + " ist " + n + " mal in Horizontaler Richtung enthalten" + (searchHorizontal(raetsel, word)));[/code]

[JAVA=42]
public static int searchHorizontal(char[][] raetsel, String word)

{
int n = 0;
for(int i = 0; i < raetsel.length - 1; i++)
for(int j = 0; j < raetsel.length - 1; j++)
{
int k=0;

while (k < word.length() && raetsel [j+k] == word.charAt(k))
k++;
if(k == word.length())
{
n++;
continue;
}
}
return n;
[/code]


Also ich habs jetzt so abgeänder jedoch hab ich einen Fehler weiß jedoch nicht wo bin noch ein ziemlicher anfänger und zwar ist "n" im ersten Teil unterringelt mit dem Kommentar "n cannot be resolved to a variable".
 
M

Marcinek

Gast
Er kennt die Variable nicht, da wo du sie verwendest.

Variablen sind i.d.R. nur zwischen den { } gültig

Gruß,

Martin
 

joh.

Mitglied
Ok aber wenn ich die Variable n im main programm deklariere kann ich ja den wert dieser in den methoden nicht mehr ändern also ich weiß irgendwie nicht wie ich das schreiben soll um die tatsächliche anzahl in meiner methode zu bestimmen und dann an mein main programm weiter zu geben?
 
M

Marcinek

Gast
Basics.....
Java:
public in getNumer() {
  return 1;
}

----

somewhere else:

Java:
int i = getNumber();
 
Ähnliche Java Themen

Ähnliche Java Themen


Oben