我的节目正在猜一个字。我有2个字符串wordToGuess
- 用户应猜的字和
wordSoFar
- 用户使用_ _ _
看到的字词。
当他猜一封信时,_
改变了那封信。
我尝试使用substring
但它没有用,所以现在我正在尝试使用stringBuilder
并且它在运行时不起作用。
public String showLetter(char letter) {
StringBuilder sb = new StringBuilder(wordSoFar);
for (int i = 0; i < wordToGuess.length(); i++) {
if (wordToGuess.charAt(i) == letter) {
sb.setCharAt(i, letter);
}
}
return sb;
}
答案 0 :(得分:0)
您不需要StringBuilder:
String wordSoFar = "_ _ _ _ _";
String wordAfterGuess = wordSoFar.substring(0,4)+'x'+wordSoFar.substring(5);
这应该导致“_ _ x _ _”
你的总课程可能如下所示:
public class test {
private static String wordToGuess = "quorum";
private static String wordSoFar = "______";
public static void main(String[] args) {
wordSoFar = showLetter('r');
System.err.println(wordSoFar);
wordSoFar = showLetter('q');
System.err.println(wordSoFar);
wordSoFar = showLetter('m');
System.err.println(wordSoFar);
}
public static String showLetter(char letter) {
for (int i = 0; i < wordToGuess.length(); i++) {
if (wordToGuess.charAt(i) == letter) {
wordSoFar = wordSoFar.substring(0,i)+letter+wordSoFar.substring(i+1);
}
}
return wordSoFar;
}
}
给出以下输出:
___r__
q__r__
q__r_m
答案 1 :(得分:0)
您似乎正在尝试返回StringBuilder
对象而不是您的方法指定为返回类型的String
对象,而这两个对象是完全不同的对象。
您无法将StringBuilder
投射到String
,但您可以使用{{1}将StringBuilder
的内容输出为String
} {}方法,附加到.toString()
语句的末尾,因此它沿着return
答案 2 :(得分:0)
你过度复杂的事情。您需要一个存储char值的数据结构;这很容易改变;这可以很容易地变成一个字符串。 String或StringBuilder / Buffer对于此要求不是一个好的数据结构(正如您已经想到的那样:因为String对象是不可变的)。
因此,我建议采用不同的解决方案:只需将不使用字符串或缓冲区作为猜测字符的“数据结构”。
相反,做一些事情:
char guesseedChars = new char[x];
Arrays.fill(guesseedChars, '_');
最初(其中x将是要猜的单词的长度)。
现在,当用户做出正确的猜测时,请删除_:
guesseedChars[index] = 'a'
换句话说:用正确的字母替换“通配符”_。
要打印,您可以使用:
String currentContent = new String(guesseedChars)
在每个循环中;并打印该字符串。完成。