2016-01-14 2 views
0

заблаговременно за чтение о моей проблеме.Java: StringIndexOutOfBoundsException при использовании .charAt() in for-loop

Я делаю игру Hangman, где хочу распечатать скрытую версию текущего слова, но я хотел бы обновить ее, когда правильное письмо будет угадано (в нужном месте тоже). Я смотрю вокруг StackOverflow, но я просто не могу найти объяснения, которые я понимаю. Если бы кто-то мог мне помочь, это было бы здорово. : D

Я отправлю для цикла, что это примерно. Я могу опубликовать больше кода, если вам это может понадобиться. AnswerInput и guessInputString считываются с консоли ранее в моем коде с использованием метода br.readLine().

for (int i = 0; i < inputAnswer.length(); i++) { 

    char inputAnswerChar = inputAnswer.charAt(i); 

    char guessInputChar =guessInputString.charAt(i); 

    if (inputAnswerChar == guessInputChar) { 

     replacementString.replace(replacementString.charAt(i), inputAnswerChar); 
    } 

} 

Благодарим за любую помощь, которую вы можете мне дать!

+2

Если вы должны были пройти через ваш код в ваш отладчик, с простым примером вы сможете увидеть, что проблема самостоятельно. –

+0

Спасибо, я посмотрю в отладчике, чтобы узнать, что я могу найти. :) – bakfietsland

ответ

3

Ваш код при условии, что guessInputString и replacementString оба имеют по крайней мере, столько символов, сколько inputAnswer, что, очевидно, неверно считать, так как ваш цикл только гарантирует, что i «го символа существует для inputAnswer String.

BTW, replacementString.replace(replacementString.charAt(i), inputAnswerChar) не действует, так как он не может изменить String выполнен для (с String s неизменяемых). Вы должны назначить новый String возвращаемый этим методом обратно replacementString:

replacementString = replacementString.replace(replacementString.charAt(i), inputAnswerChar) 
+0

Благодарим за быстрый ответ в первую очередь :) Возможно, у вас есть представление о том, как я могу его переписать? На этапах, это то, что мне нужно это сделать: -если inputAnswer содержит guessInputString письмо -для каждого символа -если inputAnswer буквы равно guessInputString письмо -replace replacementString письмо с inputAnswer письмом – bakfietsland

+0

@bakfietsland это трудно сказать, не видя больше вашего кода. У вас есть 3 строки. Как они инициализируются? Должны ли они иметь одинаковую длину? – Eran

+0

Эти три строки инициализируются следующим образом: -входОтвета извлекает br.readLine(); -guessInputString позже извлекается br.readLine(); -replacementString - это строка, состоящая из символов «_» для каждой буквы ввода. – bakfietsland

Смежные вопросы