Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java:刽子手游戏重复字母_Java_String_Stringbuffer_Chars - Fatal编程技术网

java:刽子手游戏重复字母

java:刽子手游戏重复字母,java,string,stringbuffer,chars,Java,String,Stringbuffer,Chars,我有一个hangman项目的逻辑问题,它从用户那里获取一封信,然后搜索该信是否包含在秘密单词中。问题在于我编程的方式,如果用户在秘密单词中猜到的字母出现过多次。它将只是通过并表示它们所有。这不是我想要的,我只希望它一次更新一个正确猜测的字母的状态 我尝试了一些不同的方法,比如在状态(猜测,之后设置一个中断,但是迭代器只会转到第一个字母匹配的地方,并在那里停止 有什么简单的解决办法吗 private void compare(String str) { guessCh = str.char

我有一个hangman项目的逻辑问题,它从用户那里获取一封信,然后搜索该信是否包含在秘密单词中。问题在于我编程的方式,如果用户在秘密单词中猜到的字母出现过多次。它将只是通过并表示它们所有。这不是我想要的,我只希望它一次更新一个正确猜测的字母的状态

我尝试了一些不同的方法,比如在
状态(猜测,
之后设置一个中断,但是迭代器只会转到第一个字母匹配的地方,并在那里停止

有什么简单的解决办法吗

private void compare(String str)
{
    guessCh = str.charAt(0);
    char secretCh = '0';
    for (int i = i2; i < secretWord.length(); i++)                                           // Cuts the secret word into individual chars to process. 
    {
        secretCh = secretWord.charAt(i);
//      Compare the two strings.
        if (guessCh == secretCh)                                                            
        {
            status(guessCh, i);                                                               // Sends the letter & placement to status().  
        }

    }

}
private void比较(String str)
{
猜测=str.charAt(0);
char secretCh='0';
for(int i=i2;i
n

私有字符串状态(字符猜测、整数放置)
{
/*更新并返回状态*/

如果(猜测>='A'&&guessCh我猜这是某种作业-但无论如何,为什么不使用

我猜这是某种作业-但无论如何,为什么不使用

您可以使用比较方法中的状态变量来测试先前的解决方案

    if (guessCh == secretCh && status.charAt(i) != secretCh)
    {
        status(guessCh, i);
        break;
    }

您可以使用比较方法中的状态变量来测试先前的解决方案

    if (guessCh == secretCh && status.charAt(i) != secretCh)
    {
        status(guessCh, i);
        break;
    }
据我所知(并理解),您面临的基本问题是由compare方法中的
for
循环引起的

    if (guessCh == secretCh && status.charAt(i) != secretCh)
    {
        status(guessCh, i);
        break;
    }
(注意,我的示例区分大小写,您需要考虑)

我可以推荐两种基本方法

第一个是,用一次检查匹配所有出现的情况

private char guessCh;
private String secretWord;
private String status;
private String secretBuffer;

public TestStringCompare() {

    secretWord = "This is a test";
    // This is a copy of the secret word, this ensures that
    // we always have a copy of the original.
    secretBuffer = secretWord;
    status     = "______________";
    guessCh = 'i';

    compare("i");

}

private void compare(String str) {

    while (secretBuffer.contains(str)) {

        int foundAt = secretBuffer.indexOf(str);
        status(str.charAt(0), foundAt);
        // We want to remove the "guess" from our check string
        // so it doesn't cause a false positive in the future
        StringBuilder sb = new StringBuilder(secretBuffer);
        sb.replace(foundAt, foundAt + 1, "_");

        secretBuffer = sb.toString();
        System.out.println(secretBuffer);


    }

}

private String status(char guessCh, int placement) {
    /*  Update and return status. */

    if (Character.isLetter(guessCh)) {
        status = new StringBuffer(status).deleteCharAt(placement).toString();
        status = new StringBuffer(status).insert(placement, guessCh).toString();
        System.out.println("That guess is correct.");
        System.out.println(status);
    }

    return status;
}
这将产生:

That guess is correct.
__i___________
Th_s is a test
That guess is correct.
__i__i________
Th_s _s a test
或者,替换第一次出现的猜测(据我所知,这就是你所追求的)

这将产生这个

That guess is correct.
__i___________
Th_s is a test
据我所知(并理解),您面临的基本问题是由compare方法中的
for
循环引起的

    if (guessCh == secretCh && status.charAt(i) != secretCh)
    {
        status(guessCh, i);
        break;
    }
(注意,我的示例区分大小写,您需要考虑)

我可以推荐两种基本方法

第一个是,用一次检查匹配所有出现的情况

private char guessCh;
private String secretWord;
private String status;
private String secretBuffer;

public TestStringCompare() {

    secretWord = "This is a test";
    // This is a copy of the secret word, this ensures that
    // we always have a copy of the original.
    secretBuffer = secretWord;
    status     = "______________";
    guessCh = 'i';

    compare("i");

}

private void compare(String str) {

    while (secretBuffer.contains(str)) {

        int foundAt = secretBuffer.indexOf(str);
        status(str.charAt(0), foundAt);
        // We want to remove the "guess" from our check string
        // so it doesn't cause a false positive in the future
        StringBuilder sb = new StringBuilder(secretBuffer);
        sb.replace(foundAt, foundAt + 1, "_");

        secretBuffer = sb.toString();
        System.out.println(secretBuffer);


    }

}

private String status(char guessCh, int placement) {
    /*  Update and return status. */

    if (Character.isLetter(guessCh)) {
        status = new StringBuffer(status).deleteCharAt(placement).toString();
        status = new StringBuffer(status).insert(placement, guessCh).toString();
        System.out.println("That guess is correct.");
        System.out.println(status);
    }

    return status;
}
这将产生:

That guess is correct.
__i___________
Th_s is a test
That guess is correct.
__i__i________
Th_s _s a test
或者,替换第一次出现的猜测(据我所知,这就是你所追求的)

这将产生这个

That guess is correct.
__i___________
Th_s is a test

status.charAt(i)!=secretCh的测试使其跳过已解决的字母,
break
使其在解决一个新字母时停止。
status.charAt(i)的测试!=secretCh
使其跳过已解决的字母,而
break
使其在解决一个新字母时停止。