private String kNow(String state, String guess) {
for (int i = 0; i < word.length(); i++) {
if (guess.equals(word.charAt(i))) {
state.charAt(i) = word.charAt(i);
}
}
return state;
}
state.charAt(i)部分指出标题中的问题。 如果我的方法没有完全错误,我该如何解决问题。
答案 0 :(得分:9)
这不起作用的原因是因为charAt(int x)
是String
类的一个方法 - 即它是一个函数,你不能在Java中为函数赋值。
如果你想逐个字符地循环字符串,我可能会想要这样做:
Char[] GuessAsChar = guess.toCharArray();
然后操作GuessAsChar。根据您的需要,可能有更好的方式(如整洁的方式)在字符串中搜索字符等效性。
答案 1 :(得分:4)
不完全确定guess.equals(word.charAt(i))
的意图是什么,因为该String
永远不能等于char
,但是你想要转换你的{{1}转到String
StringBuilder
答案 2 :(得分:2)
Java中的字符串是immutable。这意味着一旦创建了字符串对象,就无法更改它。但是,您可以创建一个新字符串,然后将其重新分配给变量。
state = state.substring(0, i) + word.charAt(i) + state.substring(i + 1);
然而,在这种情况下,我认为最好为state
使用可变类型,例如字符数组(char[]
)。这允许您直接修改单个字符。
代码的第二个问题是guess
可能应该是char,而不是字符串。目前,if
语句将始终返回false,因为string
类型的对象永远不会等同于char
类型的对象。
答案 3 :(得分:2)
Java中的字符串是不可变的:在创建字符串后不能更改字符串。为byte[]
使用char[]
或state
或集合可能更好。