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

时间:2010-09-03 21:33:10

标签: java compiler-errors

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

4 个答案:

答案 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或集合可能更好。