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