2017-10-15 37 views
1

我在做一個Hang子手遊戲。我已經完成了它,但是我寫的代碼,只要有兩個或更多的位置被隱藏的單詞替換爲猜測的字母,就只適用於第一個。例如,如果要找到的單詞是「ball」,並且用戶輸入「b」和「l」,而不是「b_ll」,則他將作爲隱藏詞返回的單詞是「b_l_」。這是一種奇怪的練習,因爲用戶首先輸入字母,而不會在每次猜測後得到反饋。這是代碼。在hang子手遊戲中填寫每一個丟失的字母的地方

for (int c = 0; c < guessedLetters.length(); c++) 
{ 
    if (wordToBeFound.contains(Character.toString(guessedLetters.charAt(c)))) 
    { 
     hiddenWordChars[wordToBeFound.indexOf(guessedLetters.charAt(c))] = 
     guessedLetters.charAt(c);   
    } 
} 

在此先感謝您。

回答

2

問題是,indexOf()僅提供它找到的第一個索引。意思是上面的代碼在第一次命中後停止。解決方案是:

for (int c = 0; c < guessedLetters.toCharArray().length(); c++) 
{ // for each guessed letter 
    for(int c1 =0; c1<wordToBeFound.toCharArray().length; c1++){ //look at each letter in the word, searching for a match 
     if(guessedLetters[c]==hiddenWordChars[c1]){ 
      hiddenWordChars[c1] = guessedLetters[c];  
     } 
    } 
} 
+1

注意:不要在循環的保護條件中調用'str.toCharArray()'。它在每次調用時將字符串的字符複製到一個新數組中,這意味着每次循環迭代。只需使用'str.length()'(你不得不使用'str.toCharArray().length')。另外,你不能用'[]'索引到一個字符串。 –

+0

Yeap解決了這個問題,雖然做了一些小的改動。關鍵是邏輯很好。謝謝! – Leet