1

我有一个hangman-app,我从我创建的数据库中获取一个随机单词,然后我将它保存到randomedWord,然后我制作另一个字符串来保存randomedWord,但只替换为“_”。显示hiddenWord出来是为了让用户知道有多少个字符。

当用户点击 Enteronlicklistener触发guess()方法时:

我有以下代码启动一个本地字符串,其值为 a TextView(userInput)。然后如果randomedWord包含我想把guess放在与它在相同的位置的猜测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用 guess into替换与它相同的 POSITION hiddenWord

4

3 回答 3

0

我会稍微改变你的方法。当用户输入并被guess()调用时,找到该猜测的所有出现randomedWord,然后将字符设置hiddenWord为猜测。使用StringBuilderand String.indexOf(),它看起来像这样。此外,guess 需要是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

我对该问题的解决方案如下所示:

// INVWORD 方法将获取的单词转换为副本但只有“_”

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

// 猜测点击回车键时调用的方法

 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(".", "_"); 中添加一个 +" " 使这个词像 _ _ _ _ _ 并让用户看到这个词有多少个 ketters。在我的解决方案中,它只会很长_ ___,但它有效。如果我在 builder.setCharAt(index, guess); 处设置 index*2; 格式会很好,但然后是winner(); 永远不会运行,我猜是因为“”使 hiddenWord 不再 = ranomedWord。

我该如何解决这个问题?

于 2012-09-25T11:14:46.863 回答
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(char) 放在获取的索引处,如果 hiddenWord 不再包含“_”则调用获胜者()

  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 回答