# Worte raten auf Konsole



## dina99 (22. Nov 2020)

könnte wer mich helfen?


Es soll ein zufällig erzeugtes Wort (bestehend nur aus Kleinbuchstaben, ohne Umlaute) erraten werden. Dazu ist die Methode guessWord() zu erstellen. Diese erhält das zu erratende Wort und die Anzahl maximaler Versuche als Parameter. Zurückgegeben wird ein String der selben Länge wie das zu erratende Wort, wobei die bereits richtig getippten Buchstaben an ihren Positionen stehen und die noch nicht erratenen Buchstaben mittels einem Punkt dargestellt werden. Die Methode ruft auch immer wieder zur Eingabe des nächsten Buchstabens auf, liest ihn ein und zeigt das Zwischenergebnis an.

*public static String guessWord(String wordToGuess, int maxTrials)*

Die main-Methode hat das gesuchte Wort und das (vollständig oder teilweise) erratene Wort auszugeben. Weiters hat sie aufgrund des Rückgabewerts festzustellen, ob das Wort erraten wurde oder nicht (d.h. neben den ersten beiden Zeilen werden auch die letzten 3 Zeilen von der main-Methode ausgegeben).

Um feststellen zu können, ob ein Wort erraten wurde, ist die Methode checkGuess() zu erstellen. Wenn das zu erratene Wort wordToGuess gleich dem geratenen Wort wordGuessed ist, dann ist true zurückzugeben, sonst false.

*public static boolean checkGuess(String wordToGuess, String wordGuessed)

Wichtig:* Das Format der Ausgabe soll exakt den Beispielen unten entsprechen!

output:

Buchstaben raten
Wie lange soll das Wort sein? 7
1.Versuch von 10: m
.....mm
2.Versuch von 10: o
..o..mm
3.Versuch von 10: p
p.o..mm
4.Versuch von 10: r
pro.rmm
5.Versuch von 10: g
progrmm
gesuchtes Wort: progrmm
erratenes Wort: progrmm
erraten


----------



## thecain (23. Nov 2020)

Ja, deine Frage?


----------



## mihe7 (23. Nov 2020)

Was hast Du denn schon probiert und wo liegt das Problem?


----------



## MoxxiManagarm (23. Nov 2020)

Ich finde das ist echt eine verwirrende Programmstruktur, jehnseits von OOP. Aber ok. In der Aufgabe fehlt mir aber irgendwie was. Wie kommst du nach der Eingabe der Wortlänge auf ein Wort, welches erraten werden soll? Hast du dazu irgendwelche Vorgaben? Sollst du dir diese ausdenken?

Grundsätzlich musst du folgende Schritte tun
Programmanfang (Ausgabe)
Eingabe der Wortlänge
Wort mit dieser Länge generieren?!
guessWord aufrufen
--Methodenanfang (erstelle einen String aus Punkten mit entsprechender Länge)
--wiederhole 1..maxTrials mal
----gib Buchstaben ein
----verändere den Punktstring mit dem eingegebenen Buchstaben
----gib String aus, beende Methode ggf. vorzeitig wenn Wort bereits erraten
--Nach Schleife gib den Punktstring zurück
gibt beide Wörter aus
rufe checkGuess auf
--String vergleich
Ausgabe je nach Ergebnis von checkGuess


----------



## dina99 (23. Nov 2020)

```
public static void main (String[] args){
       int length = 0;
       int pos = 0;
       char newChar = 0;
       char neuZ = 0;
       String text = createWord(length);
 
 
     System.out.print("Buchstabenanzahl eingeben: ");
       length = SavitchIn.readLineInt();
 
     System.out.println("Zufallswort: " + createWord(length) );
 
     System.out.print("zu aendernde Position: ");
       pos = SavitchIn.readLineInt();
     System.out.print("neues Zeichen: " );
       neuZ = SavitchIn.readChar();
     System.out.println("neues Wort: " + replaceAt(text,pos,newChar) );
 

    }

    public static String createWord (int length){
       char[] alphabet = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
       'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
       if (length <= 0){
      
       return "";
       }
 
      return PRNG.randomString(length,alphabet);
    }

    public static String replaceAt (String text, int pos, char newChar){
         int length = text.length();

       if (pos>=0 && pos<length){
       char [] textChars = text.toCharArray();
       textChars[pos] = newChar;
       text = String.valueOf(textChars);
             }
          return text;

    }

    public static String guessWord(String wordToGuess, int maxTrials){
       return "test";
    }

    public static boolean checkGuess(String wordToGuess, String wordGuessed){
        if (wordToGuess.equals(wordGuessed)){
            System.out.println("erraten");
            return true;
        }else{
            System.out.println("nicht erraten");
            return false;
        }
    }
```


----------



## dina99 (23. Nov 2020)

das war teil 1 von dem aber teil 2 könnte ich gar nicht schreiben


----------



## mihe7 (24. Nov 2020)

Das ist doch schon mal was. Als nächstes schreibst Du mal eine Methode `String replaceLetters(String wordToGuess, String guessedWord, char letter)`. Die Methode sucht in wordToGuess nach allen Vorkommen von letter und setzt an den betreffenden Stelle (replaceAt) den Buchstaben im guessedWord und liefert das Ergebnis zurück.

Zum Beispiel soll `replaceLetters("ABBA", "....", 'B')` den String `".BB."` liefern.


----------

