2017-10-15 5 views
1

私はハングマンゲームを作っています。私はほとんどそれを終えましたが、私が書いたコードは、隠れた言葉で推測された文字で置き換えられる2つ以上の場所があるときはいつでも、最初のもののためだけに働きます。例えば、見つかる単語が「ボール」であり、ユーザが「b_ll」の代わりに「b」および「l」を入力すると、彼が隠れた単語として戻す単語は「b_l_」である。これは、ユーザが最初に文字を入力するので、奇妙な運動の一種です。それぞれの推測の後にフィードバックを得ることはありません。ここにコードがあります。ハングマンゲームで不足している文字をすべての場所に埋め込みます。

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

少々の変更を加えても、これを解決してください。ポイントは、ロジックが上手だということです。ありがとうございました! – Leet

関連する問題