【问题标题】:"The left-hand side of an assignment must be a variable" problem with charAtcharAt 的“赋值左侧必须是变量”问题
【发布时间】:2010-09-03 21:33:10
【问题描述】:
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) 部分指出标题中的问题。 如果我的方法不是完全错误的,我该如何解决这个问题。

【问题讨论】:

  • 什么是word?你想让这个方法做什么?

标签: java compiler-errors


【解决方案1】:

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

如果你想逐个字符地遍历一个字符串,我可能会想这样做:

Char[] GuessAsChar = guess.toCharArray();

然后改为对 GuessAsChar 进行操作。根据您的需要,可能有更好(如更简洁)的方法来搜索字符串中的字符等价性。

【讨论】:

    【解决方案2】:

    不完全确定 guess.equals(word.charAt(i)) 的意图是什么,因为该语句将始终评估为 false,因为 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();
    }
    

    【讨论】:

    • +1 指出 if 语句总是失败。我也将此添加到我的分析器中(比您早 8 秒 :-P),但这是非常重要的一点,我认为您也应该得到支持。
    • 这不会编译。没有声明 word
    • 我想word 是声明类中的一个字段。
    【解决方案3】:

    Java 中的字符串是不可变的:字符串创建后就无法更改。使用byte[]char[]state 的集合可能会更好。

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-07-06
        • 2012-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多