“赋值的左侧必须是charAt的变量”问题

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)部分指出标题中的问题。 如果我的方法没有完全错误,我该如何解决问题。

这不起作用的原因是因为charAt(int x)String类的一个方法 – 即它是一个函数,并且您不能在Java中为函数赋值。

如果你想逐个字符循环字符串,我可能会想要这样做:

 Char[] GuessAsChar = guess.toCharArray(); 

然后在GuessAsChar上操作。 根据您的需要,可能更好(如更整洁)的方法来搜索字符串中的字符等效性。

不完全确定guess.equals(word.charAt(i))的意图是什么,因为该String永远不能等于char ,但是你想将String转换为StringBuilder

 private String kNow(String state, String guess) { final StringBuilder mutable = new StringBuilder(state); for (int i = 0; i < word.length(); i++) { if (guess.equals(word.charAt(i))) { mutable.setCharAt(i, word.charAt(i)); } } return mutable.toString(); } 

Java中的字符串是不可变的:在创建字符串后不能更改字符串。 使用byte[]char[]或集合进行state可能更好。

字符串在Java中是不可变的。 这意味着一旦创建了字符串对象,就无法更改它。 但是,您可以创建一个新字符串,然后将其重新分配给变量。

 state = state.substring(0, i) + word.charAt(i) + state.substring(i + 1); 

但是在这种情况下,我认为最好使用一个可变类型的state ,如字符数组( char[] )。 这允许您直接修改单个字符。

你的代码的第二个问题是guess应该是char,而不是字符串。 目前, if语句将始终返回false,因为string类型的对象永远不会等于char类型的对象。