Java 爪哇刽子手-重复信件

Java 爪哇刽子手-重复信件,java,Java,我一直在为java开发一个hangman代码,并设法使其正常工作,但当涉及到重复字母的单词时,例如“香蕉”,其中“a”是重复的,我的代码似乎不起作用。到目前为止,我已经创建了一个循环,它从0循环到“genRadmLetter”的数组长度。在循环内部,我创建了一个if语句,表示如果位置不是-1,则更新数组。否则打印“未找到信件”。下面是我所说的特定代码: int rpCount = 0; for (int y = 0; y<genRadmLetter.length; y++

我一直在为java开发一个hangman代码,并设法使其正常工作,但当涉及到重复字母的单词时,例如“香蕉”,其中“a”是重复的,我的代码似乎不起作用。到目前为止,我已经创建了一个循环,它从0循环到“genRadmLetter”的数组长度。在循环内部,我创建了一个if语句,表示如果位置不是-1,则更新数组。否则打印“未找到信件”。下面是我所说的特定代码:

int rpCount = 0; 
        for (int y = 0; y<genRadmLetter.length; y++){
            int position = radmWord.indexOf(guessedLetter, rpCount);

            if (position != -1){

                genRadmLetter[RW] = guessedLetter;
                System.out.println(genRadmLetter);
                result = true;

            }

        }

    }

    if (result != true){

                System.out.println("Wrong letter, try again.");

    }
int rpCount=0;
对于(int y=0;y,通过“不起作用”,我猜您的意思是它只是在“banana”中查找“a”的第一个实例。这是因为indexOf方法总是从第二个参数指定的索引开始返回指定字符的第一个实例。您正在指定rpCount,该参数已初始化为0,但从未更新,因此它将只查找一审

简单修复:

if (position != -1){

   genRadmLetter[RW] = guessedLetter;
   System.out.println(genRadmLetter);
   result = true;

   **rpCount = position;**

}

RW
rpCount
不会在循环内更新,因此您总是:

  • 正在检查第一个事件
  • 替换第一个事件
如果要使用
indexOf
执行此操作,则每次都需要更新。(
fromIndex
是它开始搜索的索引,因此如果它始终为0,它将始终找到第一个匹配项。)类似于以下内容:

int last = 0;
for(int y = 0; y < genRadmLetter.length; y++) {
    int pos = radmWord.indexOf(guessedLetter, last);

    if(pos > -1) {
        genRadmLetter[pos] = guessedLetter; // use found index to replace
        result = true;

        last = pos + 1; // skip to the next letter
    }
    if(pos == radmWord.length() - 1) {
        break; // it was the last letter
    }
}
int pos = 0;
do {
    pos = radmWord.indexOf(guessedLetter, pos);

    if(pos > -1) {
        genRadmLetter[pos] = guessedLetter;
        result = true;
        pos++;
    }
} while(pos > -1 && pos < radmWord.length());
但是请注意,如果数组只是并行的,那么可以使用
charAt
实现这一点:

for(int i = 0; i < genRadmLetter.length; i++) {
    if(radmWord.charAt(i) == guessedLetter) {
        genRadmLetter[i] = guessedLetter;
        result = true;
    }
}
for(int i=0;i
您是否需要在每次迭代中更新rpCount?可能设置rpCount=position谢谢,它似乎替换了字母,但由于某种原因它会继续循环?
fromIndex
包含在内,它需要更新到
位置+1
。是的,忘记了那个。:-)
for(int i = 0; i < genRadmLetter.length; i++) {
    if(radmWord.charAt(i) == guessedLetter) {
        genRadmLetter[i] = guessedLetter;
        result = true;
    }
}