在这个方法中,在if(this.guessedLetters.contains(buildWord))
使用String buildWord,当我用主文件运行testProgram时,我得到的结果不正确,但是当我手动使用if(this.guessedLetters.contains("" + letter))
时,它可以工作。我的问题是这里有什么区别?为什么这两个不一样:if(this.guessedLetters.contains(buildWord))
和if(this.guessedLetters.contains("" + letter))
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 :(得分:2)
不同之处在于letter
在循环中得到更新,但buildWord
并不总是等于字符串" "
。如果您在重新分配buildWord = "" + letter;
后添加letter
,那么它将起作用:
while (i < this.word.length()) {
letter = this.word.charAt(i);
buildWord = "" + letter; // <------------
if (this.guessedLetters.contains(buildWord))
有关将字符转换为字符串的不同方法的详细信息,请参阅How to convert a char to a String?
答案 1 :(得分:0)
差异是String.contains(CharSequence s)方法只将CharSequence作为参数。 CharSequence是一个接口,所有已知的实现类都是:
CharBuffer,Segment,String,StringBuffer,StringBuilder
您可以将上述类中的任何一个作为参数传递,但不能直接传递 char ,这就是为什么当您尝试转换字母(char)时作为 buildWord (字符串),接受,因为它是CharSequence的实现类。
进一步参考CharSequence java documentation和 String java documentation