1

作成したDbからランダムな単語をフェッチするhangman-appがあり、それを保存してからrandomedWord、保持するための別の文字列を作成しますrandomedWordが、「_」のみに置き換えます。これhiddenWordは、ユーザーが文字数を知るために表示されます。

ユーザーがonlicklistenerEnterfiresguess()メソッドを押したとき:

の値を持つローカル文字列を初期化する次のコードがありますTextView(userInput)。次に、推測が含まれている場合randomedWordは、推測をと同じ位置に配置しますがrandomedWord、ここでもう一度hiddenWord更新TextViewします。

推測方法:

public void guess() 
{
    String guess = userInput.getText().toString();

    if(randomedWord.contains(guess)) 
    {
        hiddenWord = hiddenWord.replaceAll(guess, guess);
        this.wordHolder.setText(hiddenWord);
    } else 
    {
        showImages();
    }
}

私が思う問題はこの行です:

hiddenWord = hiddenWord.replaceAll(guess, guess);

なぜなら、hiddenWord「_」が含まれているだけなので、最初は何を置き換え、最後は「WITHWHAT」であるため、(推測、推測)で置き換えることはできません。

randomedWord推測で同じPOSITIONを置き換えるにはどうすればよいhiddenWordですか?

4

3 に答える 3

0

私はあなたのアプローチを少し変えます。ユーザーが入力しguess()て呼び出されると、その推測のすべての出現を見つけてから、推測randomedWordする文字を設定しhiddenWordます。とを使用するStringBuilderString.indexOf()、次のようになります。また、推測は次のようにする必要がありますchar

StringBuilder builder = new StringBuilder(hiddenWord);
int index = word.indexOf(guess);
while (index >= 0) {
    builder.setCharAt(index, guess);
    index = word.indexOf(guess, index + 1);
}
hiddenWord = builder.toString();
于 2012-09-24T20:24:45.873 に答える
0

すべて解決しました!すべてが順調に進んだときの感覚.... :)

コードは次のとおりです。

// リスナーを入力ボタンに設定し、テキストフィールドが空でない場合に推測し、空である場合はその入力が必要であることをトーストします

 enterLetterButton.setOnClickListener(new OnClickListener(){
            public void onClick(View arg0) {

                if (!(userInput.getText().toString().isEmpty()) )
                {
                    guess();
                } else if (userInput.getText().toString().isEmpty())
                {
                    Toast toast = Toast.makeText(getApplicationContext(), "You need to insert a letter", Toast.LENGTH_SHORT);
                    toast.show();
                }
            }
        });

// invWord() メソッド。randomedWord を "_" の文字列に変換します。

public void invWord() 
    {
        hiddenWord = randomedWord;
        hiddenWord = hiddenWord.replaceAll(".", "_" +" ");
    }

//guess() メソッド。フェッチされたインデックスにguess(char)を配置し、hiddenWordに「_」が含まれていない場合は、winner()が呼び出されます

  public void guess() throws IndexOutOfBoundsException
        {
            char guess = userInput.getText().charAt(0);
            StringBuilder builder = new StringBuilder(hiddenWord);
            String j = ""+guess;
            int index = randomedWord.indexOf(guess);

            if (randomedWord.contains(j))
            {
                while (index >= 0) 
                {
                    builder.setCharAt(index*2, guess);
                    index = randomedWord.indexOf(guess, index + 1);
                    hiddenWord = builder.toString().trim();
                    wordHolder.setText(hiddenWord);
                    if (!(hiddenWord.toString().contains("_".toString())) )
                    {
                        winner();
                    }
                }   
            }
            else 
            {
                showImages();
            }
        }
于 2012-09-25T12:42:50.160 に答える
0

問題に対する私の解決策は次のようになります。

// フェッチされた単語をコピーに変換する INVWORD メソッド ("_" のみ)

 public void invWord() 
    {
        hiddenWord = randomedWord;
        hiddenWord = hiddenWord.replaceAll(".", "_");
    }

// ENTER ボタンがクリックされたときに呼び出される GUESS メソッド

 public void guess() throws IndexOutOfBoundsException
    {
        char guess = userInput.getText().charAt(0);
        StringBuilder builder = new StringBuilder(hiddenWord);
        String j = ""+guess;
        int index = randomedWord.indexOf(guess);

        if (randomedWord.contains(j))
        {
            while (index >= 0) 
            {
                builder.setCharAt(index, guess);
                index = randomedWord.indexOf(guess, index + 1);
                hiddenWord = builder.toString().trim();
                wordHolder.setText(hiddenWord);
                if (hiddenWord.trim().contains(randomedWord))
                {
                    winner();
                }
            }   
        }
        else 
        {
            showImages();
        }
    }

問題は、hiddenWord = hiddenWord.replaceAll(".", "_"); に +" " を追加する必要があることです。単語を _ _ _ _ のようにして、ユーザーにその単語がいくつケッターであるかを表示します。私の解決策では、 _ ___だけ長くなりますが、機能します。builder.setCharAt(index,guess); に index*2 を設定すると、フォーマットは適切ですが、winner(); " " によって hiddenWord が = ranomedWord ではなくなるためだと思います。

どうすればこれを解決できますか?

于 2012-09-25T11:14:46.863 に答える