Java &引用;赋值的左侧必须是一个变量";查拉特的问题 私有字符串知道(字符串状态、字符串猜测){ for(int i=0;i

Java &引用;赋值的左侧必须是一个变量";查拉特的问题 私有字符串知道(字符串状态、字符串猜测){ for(int i=0;i,java,compiler-errors,Java,Compiler Errors,charAt(i)部分指出了标题中的问题。 如果我的方法不是完全错误的话,我该如何解决这个问题。字符串是用Java编写的。这意味着一旦创建了字符串对象,就不能对其进行更改。但是,您可以创建一个新字符串,然后将其重新分配给变量 private String kNow(String state, String guess) { for (int i = 0; i < word.length(); i++) { if (guess.equals(word.

charAt(i)部分指出了标题中的问题。 如果我的方法不是完全错误的话,我该如何解决这个问题。

字符串是用Java编写的。这意味着一旦创建了字符串对象,就不能对其进行更改。但是,您可以创建一个新字符串,然后将其重新分配给变量

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
使用可变类型,例如字符数组(
char[]
)。这允许您直接修改单个字符


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

类型的对象,Java中的字符串是不可变的:创建字符串后,您不能更改字符串。最好使用
byte[]
char[]
state
的集合,因为
charAt(int x)
字符串的一种方法,也就是说,它是一个函数,在Java中不能为函数赋值

如果您希望逐个字符循环字符串,我可能会尝试这样做:

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

然后在Guesscar上进行手术。根据您的需要,可能有更好的(更简洁的)方法来搜索字符串中的字符等价性。

不确切地知道
guess.equals(word.charAt(i))
的目的是什么,因为该语句将始终计算为false,因为
字符串
永远不能等于
char
,但是您想将
字符串
转换为
StringBuilder

Char[] GuessAsChar = guess.toCharArray();
私有字符串知道(字符串状态、字符串猜测){
最终StringBuilder可变=新StringBuilder(状态);
for(int i=0;i
什么是
word
?您希望该方法做什么?+1指出if语句总是失败。我还把这个添加到了我的答案中(比你早8秒:-P),但这是一个非常重要的问题,我认为你也应该被提升。这不会编译。没有声明
word
。我想
word
是声明类中的一个字段。
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();
}