尝试生成字符串作为 Word Solve 解决方案的提示

Trying to Generate a String as a Hint for the Solution to a Word Solve

我正在尝试生成一个字符串作为世界解决方案的提示。

这就是我生成提示的方法,但我不确定如何更正这些错误。如果猜测在正确的位置猜到了正确的字符,则提示会显示该字符。如果单词中有字母,则在相应位置显示“+”。如果该字母不在单词中,则返回“*”。

例如,如果谜题的答案是"HARPS",猜测是"HELLO",则提示将是"H****"。同样,如果猜测是 "HEART",则提示将是 "H*++*".

此外,wordLength 是从另一种方法生成的,该方法给出了解决方案中的字符数量。

public String getHint(String theGuess) {
    for (int index = 0; index < wordLength; index++) {
        if **(theGuess.charAt(index)** = solution.charAt(index)) {
            hint.**setCharAt**(index, theGuess.charAt(index));
        } else if **(theGuess.charAt(index)** = solution.indexOf(solution)) {
            **hint.setCharAt**(index, "+");
        } else {
            **hint.setCharAt**(index, "*");
        }
    }
    return hint;
}

错误是双星的。

对于 (theGuess.charAt(index) Eclipse 显示以下错误消息:

The left-hand side of an assignment must be a variable.

对于hint.setCharAt,它告诉我:

The method setCharAt(int, String) is undefined for the type String.

此代码应该有效:

public String getHint(String theGuess) {
    StringBuilder hintBuilder = new StringBuilder(hint);
    for (int index = 0; index < wordLength; index++) {
        if (theGuess.charAt(index) == solution.charAt(index)) {
            hintBuilder.setCharAt(index, theGuess.charAt(index));

        } else if(theGuess.charAt(index) == solution.indexOf(string)) {
            hintBuilder.setCharAt(index, "+");
        } else {
            hintBuilder.setCharAt(index, "*");
        }
    }
    return hintBuilder;
}

基本上,您必须使用 'StringBuilder',因为字符串是不可变的,这意味着它们一旦构建就无法更改。 还有,比较两个值的时候,用==或者===来比较,不要用=.

已更新

我忘记了字符串在 Java 中是不可变的,并且已经更新了代码以使其正常工作。

您的代码中有许多问题需要修复:

  1. = 用于给变量赋新值。比较两个值时要使用 ==
  2. setCharAt()StringBuilder 的方法,不是 String。这个最简单的解决方案是使用 +=.
    将新字符连接到字符串 如果要使用StringBuilder,需要修复以下部分:
    • setCharAt()的第二个参数应该是字符,而不是字符串。您需要将 "*""+" 周围的双引号更改为单引号,例如 '*'
    • setCharAt() 尝试替换特定索引处的字符。如果 StringBuilder 比您尝试替换的索引位置短,这将引发错误。您可以通过立即将 StringBuilder 设置为正确长度的字符串来解决此问题,例如
      hint = new StringBuilder("*****").
      由于您总是在构建器的末尾添加,因此您实际上应该只使用 append() 而不是 setCharAt() 并且您无需担心此索引位置问题。
  3. (theGuess.charAt(index) == solution.indexOf(solution) 不会搜索整个 solution 字符串以查看它是否包含当前字符。相反,您可以使用 indexOf() 来检查字符串是否包含该字符。 link 可能有帮助:How can I check if a single character appears in a string?

这是一个完整的程序,代码有效:

public class HelloWorld
{
    public static void main(String[] args)
    {
        OtherClass myObject = new OtherClass();
        System.out.print(myObject.getHint("HEART"));
    }
}

选项 1 - 使用 += 添加到字符串:

public class OtherClass
{
    private String solution = "HARPS";
    private int wordLength = 5;

    public String getHint(String theGuess) {
        String hint = "";

        for (int index = 0; index < wordLength; index++) {
            if (theGuess.charAt(index) == solution.charAt(index)) {
                hint += theGuess.charAt(index);
            } else if (solution.indexOf(theGuess.charAt(index)) > 0) {
                hint += "+";
            } else {
                hint += "*";
            }
        }

        return hint;
    }
}

选项 2 - 使用 StringBuilder:

public class OtherClass
{
    private StringBuilder hint;
    private String solution = "HARPS";
    private int wordLength = 5;

    public String getHint(String theGuess) {
        hint = new StringBuilder();

        for (int index = 0; index < wordLength; index++) {
            if (theGuess.charAt(index) == solution.charAt(index)) {
                hint.append(theGuess.charAt(index));
            } else if(solution.indexOf(theGuess.charAt(index)) > 0) {
                hint.append('+');
            } else {
                hint.append('*');
            }
        }

      return hint.toString();    
    }
}