Проблема с левой частью присваивания должна быть переменной - PullRequest
3 голосов
/ 04 сентября 2010
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 ]

9 голосов
/ 04 сентября 2010

Причина, по которой это не работает, заключается в том, что charAt(int x) - это метод класса String, а именно - функция, и вы не можете присвоить функции значение в Java.

Если вы хотите перебрать строковый символ за символом, у меня может возникнуть желание сделать это:

Char[] GuessAsChar = guess.toCharArray();

Тогда работайте с GuessAsChar. Существуют, в зависимости от ваших потребностей, возможно лучшие (как в более аккуратном) способы поиска эквивалентности символов в строках.

4 голосов
/ 04 сентября 2010

Не совсем точно, каково намерение для 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();
}
2 голосов
/ 04 сентября 2010

Строки в Java неизменны: вы не можете изменить строку после ее создания.Может быть лучше использовать byte[] или char[] или коллекцию для state.

2 голосов
/ 04 сентября 2010

Строки неизменны в Java.Это означает, что вы не можете изменить строковый объект, как только вы его создали.Однако вы можете создать новую строку и затем переназначить ее переменной.

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

Однако в этой ситуации я думаю, что было бы лучше использовать изменяемый тип для state, такой как массив символов (char[]).Это позволяет вам напрямую изменять отдельные символы.

Вторая проблема с вашим кодом состоит в том, что guess, вероятно, должен быть символом, а не строкой.В настоящее время ваш оператор if всегда будет возвращать значение false, поскольку объект типа string никогда не будет равен объекту типа char.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...