2017-10-15 73 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

相关问题