2017-02-12 3 views
0

Mein Programm nimmt derzeit ein zufälliges Wort und wird in Bindestrichen basierend darauf, wie viele Buchstaben in dem Wort sind. Ich stelle dann fest, ob ein Buchstabe erraten ist, aber ich konnte nicht herausfinden, wie der richtig ermittelte Brief die Bindestriche entsprechend ersetzt. Ich habe auf der Website nach möglichen Lösungen gesucht, konnte aber nicht für meinen aktuellen Code arbeiten.Mit Bindestrichen in vermutete Buchstaben ändern

Code:

public String hiddenWord(){ 
    word = randomWord.getRandomWord(); 
    String dashes = word.replaceAll("[^ ]", " _ "); 
    return dashes; 
} 

public String guessNotification(){ 
    if(word.indexOf(hv.keyChar)!=-1 && (hv.keyChar >= 'a' && hv.keyChar <= 'z')) { 
     letterGuessed = "There is a " + hv.keyChar + " in the word"; 
    } 
    else if(word.indexOf(hv.keyChar)==-1 && (hv.keyChar >= 'a' && hv.keyChar <= 'z')) { 
     letterGuessed = "No " + hv.keyChar + " in the word"; 
     guesses++; 
     System.out.println(guesses); 

    } 
    else{ 
     letterGuessed = "Not a valid letter"; 
    } 
    return letterGuessed; 
} 

public void newGame() { 
    hv.createNotification(this, size); 
    guesses = 0; 
    System.out.println(word); 
} 
} 
+0

aussehen könnten Sie werden das Wort erraten so weit in einer Variablen speichern müssen, sagen 'guessedWord'. Sie können 'String' nicht verwenden, da Java'String's unveränderlich sind (sie können nicht geändert werden). Sie können 'StringBuffer' oder ein' char' Array verwenden. 'word.indexOf (hv.keyChar)' gibt Ihnen den Index des Buchstabens in dem Wort, das der Benutzer erraten hat. Verwenden Sie diesen Index, um das entsprechende Zeichen in "erratedWord" einzustellen. Wenn Sie zum Beispiel Bindestriche als StringBuffer definiert haben, können Sie 'gatedWord.setCharAt (word.indexOf (hv.keyChar), hv.keyChar)' verwenden. –

+0

Wenn Sie jede Instanz des vom Benutzer richtig erratenen Zeichens ersetzen möchten, müssen Sie 'word.indexOf' wiederholt aufrufen, um jeden Index zu erhalten, bis er -1 zurückgibt. –

+0

@DavidChoweller Ich bin mir nicht sicher, ob ich Sie richtig verstehe, also habe ich den obigen Code bearbeitet, um die Änderungen widerzuspiegeln, die ich aufgrund Ihres Vorschlags gemacht habe. Ich bin verwirrt darüber, was ich mit dem erratenen Brief anfangen soll. –

Antwort

0

Hier ist, wie die Logik, wie der entsprechenden Strich mit der richtigen Benutzer Vermutung ersetzen

public static String guessNotification(String word, char userGuess, StringBuilder dashes) { 

     int guessedIndex = word.indexOf(userGuess); 
     if (guessedIndex != -1 && (userGuess >= 'a' && userGuess <= 'z')) { 

      letterGuessed = "There is a " + userGuess + " in the word"; 
      dashes.setCharAt(guessedIndex*3+1, userGuess); 

     } 

     else if (guessedIndex == -1 && (userGuess >= 'a' && userGuess <= 'z')) { 

      letterGuessed = "No " + userGuess + " in the word"; 
      guesses++; 

     } 
     else { 

      letterGuessed = "Not a valid letter"; 

     } 

     return letterGuessed; 

    } 
+0

Vielen Dank! Eine letzte Frage, ich rufe eine Schätzungsbenachrichtigung in einer separaten Klasse an, also wie soll ich es nennen? Welche Argumente? –

+0

Sie müssen nicht notwendigerweise 'guessNotification' implementieren, wie ich gezeigt habe (d. H. Als statische Methode mit drei Argumenten). Sie können es als eine Klassenmethode beibehalten, indem Sie nur sicherstellen, dass auf 'userGuess' und' Bindestrich '' StringBuilder' von Ihrer Methode aus zugegriffen werden kann (vielleicht als Instanzvariablen). –

+0

hab es !! Danke für die Hilfe. Oh, ich habe gerade bemerkt .. was mache ich mit dem Wort, das Leerzeichen hat? wie Festplatte –

0

Kommentare sind alle richtig. Aber Sie möchten vielleicht Beispielcode sehen: Fügen Sie ein Array mit korrekten Vermutungen hinzu:

char[] correct = new char[26]; // or more, depends on whether u use non ascii chars 

Initialisieren Sie das Array mit z. ''. Dann ersetzen Sie die Striche:

StringBuilder guessedPart = new StringBuilder; 
for (int lc = 0; lc < word.lenght(); lc++) { 
    for (char c : correct) 
    if (word.indexOf(lc) = c) guessedPart.append(c); 
    if (guessedPart.length() < lc) guessedPart.append('_'); 
String guessedWord = guessedPart.toString(); 

Das sollte tun.

Verwandte Themen