2016-01-14 31 views
0

非常感謝您閱讀我的問題。在for循環中使用.charAt()時Java:StringIndexOutOfBoundsException

我正在做一個Hang子手遊戲,我想打印出當前單詞的一個隱藏版本,但是我想在正確的字母被猜出的時候更新它(在正確的位置上)。我一直在瀏覽StackOverflow,但我似乎無法找到我理解的解釋。如果有人能幫助我,那會很棒。 :D

我會發布for-loop這是關於。如果你需要的話,我可以發佈更多的代碼。 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

你的代碼是假設guessInputStringreplacementString都至少有儘可能多的字符inputAnswer,這顯然是錯誤的假設,因爲你的循環只保證i「個字符存在的inputAnswer字符串。

順便說一句,replacementString.replace(replacementString.charAt(i), inputAnswerChar)沒有效果,因爲它不能改變它執行String(因爲String是不可變的)。您必須指定用這種方法回返回replacementStringString

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

首先感謝您的快速回復:)您可能對我如何重寫它有任何想法嗎?在步驟,這是我需要做的: - 如果inputAnswer包含guessInputString信 - 對於每個角色 - 如果inputAnswer信等於與inputAnswer信 – bakfietsland

+0

guessInputString信 -replace replacementString信@bakfietsland很難沒有看到說更多的代碼。你有3個字符串。他們是如何初始化的?他們都應該有相同的長度? – Eran

+0

這3個字符串的初始化如下: -inputAnswer由br.readLine()檢索;-guessInputString稍後由br.readLine(); -replacementString是一個由'_'字符組成的字符串,用於每個inputAnswer字母 – bakfietsland