2017-02-12 10 views
0

私のプログラムは現在、ランダムな単語を取り、単語に含まれる文字の数に基づいてダッシュに変わります。私は、推測された文字が言葉に含まれているかどうかを判断しますが、正しく推測された文字をどのように置き換えるかを判断することができませんでした。私はサイト上で可能な解決策を検討しましたが、私の現在のコードでは一つの作業をすることができませんでした。ダッシュを推測された文字に変更する

コード:

public String hiddenWord(){ 
    word = randomWord.getRandomWord(); 
    String dashes = word.replaceAll("[^ ]", " _ "); 
    return dashes; 
} 

public String guessNotification(){ 
    if(word.indexOf(hv.keyChar)!=-1 && (hv.keyChar >= 'a' && hv.keyChar <= 'z')) { 
     letterGuessed = "There is a " + hv.keyChar + " in the word"; 
    } 
    else if(word.indexOf(hv.keyChar)==-1 && (hv.keyChar >= 'a' && hv.keyChar <= 'z')) { 
     letterGuessed = "No " + hv.keyChar + " in the word"; 
     guesses++; 
     System.out.println(guesses); 

    } 
    else{ 
     letterGuessed = "Not a valid letter"; 
    } 
    return letterGuessed; 
} 

public void newGame() { 
    hv.createNotification(this, size); 
    guesses = 0; 
    System.out.println(word); 
} 
} 
+0

あなたは変数で、これまで推測単語を保存する必要があります見て 'guessedWord'を言うかもしれない方法です。 Javaの 'String'は不変なので(変更できません)、' String'を使うことはできません。 'StringBuffer'または' char'配列を使うことができます。 'word.indexOf(hv.keyChar)'は、ユーザが推測した単語の文字のインデックスを返します。このインデックスを使用して、 'guessedWord'に適切な文字を設定します。たとえば、 'dashes'をStringBufferとして定義した場合、' guessedWord.setCharAt(word.indexOf(hv.keyChar)、hv.keyChar) 'を使うことができます。 –

+0

ユーザが正しく推測した文字のすべてのインスタンスを置き換えたい場合は、-1を返すまで、すべてのインデックスを取得するために 'word.indexOf'を繰り返し呼び出す必要があります。 –

+0

@DavidChowellerあなたが正しくあなたを理解しているかどうかわからないので、あなたの提案に基づいて行った変更を反映するために上記のコードを編集しました。私は推測された手紙とどうするかについて混乱している。 –

答えて

0

は、正しいユーザーの推測との適切なダッシュを交換する方法のロジックは、

public static String guessNotification(String word, char userGuess, StringBuilder dashes) { 

     int guessedIndex = word.indexOf(userGuess); 
     if (guessedIndex != -1 && (userGuess >= 'a' && userGuess <= 'z')) { 

      letterGuessed = "There is a " + userGuess + " in the word"; 
      dashes.setCharAt(guessedIndex*3+1, userGuess); 

     } 

     else if (guessedIndex == -1 && (userGuess >= 'a' && userGuess <= 'z')) { 

      letterGuessed = "No " + userGuess + " in the word"; 
      guesses++; 

     } 
     else { 

      letterGuessed = "Not a valid letter"; 

     } 

     return letterGuessed; 

    } 
+0

ありがとうございました!もう1つの質問ですが、私は別のクラスで通知を推測しています。どうすればいいですか?何の議論? –

+0

私が示したように(必ずしも3つの引数を持つ静的メソッドとして) 'guessNotification'を実装する必要はありません。クラスメソッドとして、 'userGuess'と' dashes'' StringBuilder'があなたのメソッドから(おそらくインスタンス変数として)アクセス可能であることを確認するだけです。 –

+0

それを得ました!ご協力ありがとうございます。ああ私はちょうど気づいた..スペースがある単語で私は何をしますか?ハードディスクのようなもの –

0

コメントはすべて正しいです。しかし、あなたはサンプルコードを見てみたいことがあります。

char[] correct = new char[26]; // or more, depends on whether u use non ascii chars 

は、例えば持つ配列を初期化します。正しい推測の配列を追加します。 ''。次に、ダッシュを交換してください。

StringBuilder guessedPart = new StringBuilder; 
for (int lc = 0; lc < word.lenght(); lc++) { 
    for (char c : correct) 
    if (word.indexOf(lc) = c) guessedPart.append(c); 
    if (guessedPart.length() < lc) guessedPart.append('_'); 
String guessedWord = guessedPart.toString(); 

これでいいはずです。ここで

関連する問題