2017-01-01 1 views
0

Ich möchte es so machen, dass jedes Mal hiddenWord(); aufgerufen wird, zeigt es einen Hinweis des Wortes abhängig von den vermuteten Buchstaben, die versucht wurden, so ohne Vermutungen werden Sie so etwas bekommen "____" und wenn das Wort zum Beispiel Mike und ich vermuteten, ich 'und' e 'würde "_i_e" zeigen. Ich bin schon eine ganze Weile dabei und ich kann mich einfach nicht darum kümmern. Ich bin immer noch ein Neuling, es tut mir so leid im Voraus, wenn das Problem etwas sehr Einfaches war.Versuchen, eine Methode zu machen, die die erratenen Buchstaben für das Spiel Hang Man (Java) zeigt

Ich poste die Methode, die ich versuche, ohne den Rest des Programms zu machen, wenn nötig kann ich den Rest buchen. Ich habe zwei Hauptprobleme mit dieser Methode.

1- Ich brauche this.guessedLetter haben mindestens 3 Zeichen darin, so in seinem aktuellen Zustand, der ist "" es wird nicht funktionieren. Deshalb haben wir darunter 3 Felder hinzugefügt. Sonst bekomme ich einen Indexfehler, den ich nicht verstehe.

2- Die zweite Frage ist, wie man die "_" richtig verteilen, wenn ich den Buchstaben nicht finde, ich scheine viel zu viele Bindestriche zu tun.

public String hiddenWord() { 
     int i = 1; 
     int j = 1; 
     this.guessedLetters += " "; 
     char c = this.word.charAt(i); 
     char d = this.guessedLetters.charAt(j); 
     while (i <= this.guessedLetters.length()-1) { 
      while (j <= this.word.length()-1) { 
       if (c == d) { 
        this.hiddenWord += c; 
        j++; 
       } 
       else { 
        this.hiddenWord += "_"; 
        j++; 
       }    
      } 
      i++; 
     } 
     return this.hiddenWord; 
    } 
} 
+0

1. Die Indizes bei 0, nicht 1. 2. Sie müssen zurückgesetzt j für jede Iteration von i beginnen soll. 3. c muss nachgeschlagen werden, wenn ich mich verändere, und ebenso d, wenn sich j ändert. Sie werden nur von den Werten von i und j zum Zeitpunkt der Zuweisung betroffen sein. 4. Sie sollten über die Länge des Wortes in der äußeren Schleife und die erratenen Buchstaben in der inneren Schleife iterieren. 5. Sie könnten wahrscheinlich eine alternative Lösung mit den Funktionen string replace() oder replaceAll() finden – samgak

+0

Ein Benutzer kann immer nur einen Buchstaben erraten. – Dummy

+0

Ja. Nur 1 Buchstabe gleichzeitig. – Budaika

Antwort

0

Ich habe eine kleine Klasse für Sie zusammengestellt. Ich habe es basierend auf dem geschrieben, was ich aus deiner Beschreibung ableiten konnte.

public class Hangman { 
    // This char array will hold the result after each guess 
    // for example, if the word is "mike", and the use guesses 'i' 
    // the result array will contain ['_', 'i', '_', '_'] 
    private char[] result = null; 

    // The word the user has to guess 
    private String word = null; 

    public Hangman(String word) { 
     this.word = word; 
     result = new char[word.length()]; 
     // initialize the result to contain only underscores 
     for (int i = 0; i < result.length; i++) 
      result[i] = '_'; 
    } 

    public String getResult(char guessChar) { 
     // The underlying char array of the secret word 
     char[] wordArray = word.toCharArray(); 
     for (int i = 0; i < wordArray.length; i++) { 
      if (wordArray[i] == guessChar) 
       result[i] = guessChar; 
     } 
     return new String(result); 
    } 
} 

Hier ist ein Anwendungsbeispiel der obigen Klasse

public class Test { 
    public static void main(String[] args) { 
     Hangman h = new Hangman("mike"); 
     System.out.println(h.getResult('i')); // prints _i__ 
     System.out.println(h.getResult('e')); // prints _i_e 

    } 
} 
Verwandte Themen