2017-05-23 5 views
0

Innerhalb dieser Methode wird der String BuildWord bei if(this.guessedLetters.contains(buildWord)) verwendet, wenn ich das TestProgram mit der Hauptdatei ausführen, bekomme ich die falschen Ergebnisse, aber wenn ich if(this.guessedLetters.contains("" + letter)) manuell verwende, funktioniert es. Meine Frage ist was ist der Unterschied hier ?? Warum sind diese beiden nicht gleich: if(this.guessedLetters.contains(buildWord)) und if(this.guessedLetters.contains("" + letter))Ändern eines Zeichens in eine Zeichenkette in Java

public String hiddenWord() { 
    char letter = ' '; 
    String hiddenWord = ""; 
    String buildWord = "" + letter; 
    int i = 0; 
    while (i < this.word.length()) { 
     letter = this.word.charAt(i); 
     if (this.guessedLetters.contains(buildWord)) { // ********** 
      hiddenWord += letter; 
     } else { 
      hiddenWord += '_'; 
     } 
     i++; 
    } 
    return hiddenWord; 
} 
+0

Die Werte werden aus dem Hauptverfahren, die Werte "A" "D" "S" "F" "D", das Wort aus einem Tutorial verwendet KISSA –

Antwort

2

Der Unterschied besteht darin, dass letter in der Schleife aktualisiert wird, aber buildWord nicht und immer gleich der Zeichenfolge " ". Wenn Sie buildWord = "" + letter; hinzufügen, nachdem Sie letter neu zuweisen, dann wird es funktionieren:

while (i < this.word.length()) { 
    letter = this.word.charAt(i); 
    buildWord = "" + letter;   // <------------ 
    if (this.guessedLetters.contains(buildWord)) 

Für weitere Informationen über die verschiedenen Möglichkeiten, um ein Zeichen eine Zeichenfolge zu konvertieren sehen How to convert a char to a String?

+0

Nach Ändern Sie es so, es funktioniert, ich bin nur noch verwirrt, wie, char letter hält den aktualisierten Wert, wie kommt ** 'String buildWord =" "+ Brief;' ** wird auch nicht aktualisiert? Zum Beispiel: wenn ** 'char letter = 'K'; '** wird aktualisiert, wie kommt es, **' buildWord = "" + letter; '** ist nicht **' buildWord = "" +' K ' ; ** und so weiter, wenn der Char-Brief aktualisiert wird? –

+0

Nein. Wenn Sie 'buildWord =" "+ letter" setzen, erhält es den ** aktuellen Wert ** von 'letter' und verknüpft es mit der leeren Zeichenfolge. Es aktualisiert "BuildWord" nicht ständig, da sich "Buchstaben" ändert. Was ist, wenn '" "+" Buchstabe "komplexer ist, als einen Wert aus einer Datenbank zu bekommen:' String buildWord = GetDatabaseValue() + letter; 'Denken Sie immer noch, wir sollten' buildWord' aktualisieren, wenn sich 'letter' ändert? Wie wird es aktualisiert, indem der neue Datenbankwert abgerufen und abgerufen oder der alte zwischengespeicherte Wert verwendet wird? Was passiert, wenn 'GetDatabaseValue()' sich ändert? Wie würde es überhaupt wissen? Sie müssen dem Computer sagen, was zu tun ist. – clcto

+0

In Ihrem Beispiel weisen Sie den Computer an, den in contains übergebenen Wert neu zu berechnen, indem Sie ihn mit dem Ausdruck "" + "letter" aufrufen. – clcto

0

Unterschied ist String.contains (CharSequence s) Methode wird nur CharSequence als Parameter nehmen. CharSequence ist eine Schnittstelle, und alle bekannten Implementierungsklassen sind:

CharBuffer, Segment, String, String, String

Sie irgendeine der obigen Klasse als Parameter übergeben kann, aber nicht direkt die char das ist, warum, wenn Sie versuchen, Brief (char) als buildWord (String) zu konvertieren es akzeptiert, da es eine Implementierungsklasse von CharSe ist Antwort.

zum weiteren CharSequence java documentation und String java documentation

Verwandte Themen