gpt4 book ai didi

Java Hangman - 重复的字母

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:16 25 4
gpt4 key购买 nike

我一直在为java开发一个hangman代码并设法让它工作,但是当涉及到重复字母的单词时,例如“banana”,其中“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.");

}

这是我的整个代码:

    import java.util.Scanner;
import java.util.Arrays;

public class Hangman{

public static void main(String []args){
Scanner Input = new Scanner(System.in);

String[] CollectionOfWords = {"","gravity","banana","gate","processor","momentum","earth","star","light","television","pan","cupboard"};

int radmNumber = (int) Math.ceil (Math.random() * CollectionOfWords.length);
int counter = 10;
String radmWord = CollectionOfWords[radmNumber];

System.out.println(radmWord);

char[] genRadmLetter = radmWord.toCharArray();
char[] genRadmLetter2 = radmWord.toCharArray();
for (int x = 0; x<genRadmLetter.length; x++){
genRadmLetter[x]='?';
}

System.out.println(String.valueOf(genRadmLetter));
System.out.println("Hello. Guess a letter.");
char guessedLetter = Input.next().charAt(0);
int RW = radmWord.indexOf(guessedLetter);
boolean result = false;
if (RW >= 0 ){

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.");

}


while (counter != 0) {



if (RW >= 0 ){
{

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 (RW == -1){
System.out.println("Wrong letter, try again.");
counter = counter - 1;
System.out.println("Score: " + counter);
}

boolean result2 = Arrays.equals(genRadmLetter, genRadmLetter2);
if (result2 == true){
break;
}

if (counter == 0){
break;
}

}

if (counter == 0){
System.out.println("You lose. The word was: " + radmWord);
}

else {
System.out.println("Well done, you have guessed the word.");
System.out.println("Your final score is: " + counter + "/10");
}

}

}

感谢任何帮助!谢谢!

最佳答案

RWrpCount 不会在循环内更新,因此您始终:

  • 检查第一次出现的情况。
  • 替换第一个出现的位置。

如果您想使用 indexOf 执行此操作,则需要更新 fromIndex parameter每一次。 (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
}
}

还需要一个新的 break 条件(或者,如果使用最后一个字母的索引 + 1 调用 indexOf,您将收到越界异常)。

因此,如果您要基于包含进行替换,则不需要 for(each index) 习惯用法。您并没有真正使用 y 变量,并且 for(each index) 会导致对 indexOf 的冗余调用。循环可以这样缩短:

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;
}
}

关于Java Hangman - 重复的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22569083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com