gpt4 book ai didi

java - 如何创建基于Java文本的刽子手游戏等问题

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

我正在用 Java 创建一个 Hangman 游戏,它几乎可以完美运行。所以我有两个问题。第一个是:

当用户输入一个字母并且该单词有重复的字母时,如何让它打印该字母的两个实例。

  • 我创建了一个 while 循环,但是该循环直到下一次循环之后才会输出修改后的单词。如果这有道理吗?第二个问题:我需要能够防止用户两次输入相同的字母
  • 我尝试过列表、数组和哈希集。各种各样的方法,但似乎都不起作用。

我的代码如下:

可能还有其他线程有相同的问题,但似乎没有一个有帮助,因为我无法将其实现到此人的代码中。

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

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

if (RW >= 0 ){

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

}

if (RW == -1){
System.out.println("Wrong letter, try again.");
counter = counter - 1;
System.out.println("Lives left: " + counter);
}

while (counter != 0) {

System.out.println("Guess a letter.");
guessedLetter = Input.next().charAt(0);
RW = radmWord.indexOf(guessedLetter);


if (RW >= 0 ){

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

if (RW == -1){
System.out.println("Wrong letter, try again.");
counter = counter - 1;
System.out.println("Lives left: " + counter);
} else {
System.out.println(genRadmLetter);
while (RW >= 0 ){
genRadmLetter[RW] = guessedLetter;
RW = radmWord.indexOf(guessedLetter, RW+1);
}
}

boolean result = Arrays.equals(genRadmLetter, genRadmLetter2);
if (result == 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);
}

}

}

最佳答案

而不是使用...

int RW = radmWord.indexOf(guessedLetter);

要确定输入的值是否与字符匹配(这只会返回第一个索引),您应该使用某种循环来检查每个字符

boolean found = false;
for (int rw = 0; rw < genRadmLetter2.length; rw++) {

if (genRadmLetter2[rw] == guessedLetter) {

genRadmLetter[rw] = guessedLetter;
found = true;

}

}

现在,因为您依赖 RW 的值来确定是否找到匹配项,所以我对其进行了更改,以便可以使用 boolean found 标志,例如...

if (!found) {
System.out.println("Wrong letter, try again.");
counter = counter - 1;
System.out.println("Lives left: " + counter);
}

您还有重复的代码集,可以将其简化为单个 do-while 循环,这将使阅读和更改变得更容易,例如......

do {

//...

} while (counter != 0);

对于你的第二个问题,某种Set将是最简单的解决方案......

Set<Character> guesses = new HashSet<Character>();
//...
char guessedLetter = Input.next().charAt(0);

if (guesses.contains(guessedLetter)) {

System.out.println("You've used this guess, guess again");

} else {

guesses.add(guessedLetter);

例如...

而且因为翻译代码片段并不总是那么容易......这是我的测试代码......

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

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 = "banana"; //CollectionOfWords[radmNumber];

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

Set<Character> guesses = new HashSet<Character>();
do {

System.out.println("Guess a letter.");

System.out.println(String.valueOf(genRadmLetter));
System.out.println("Hello. Guess a letter.");
char guessedLetter = Input.next().charAt(0);

if (guesses.contains(guessedLetter)) {

System.out.println("You've used this guess, guess again");

} else {

guesses.add(guessedLetter);
boolean found = false;
for (int rw = 0; rw < genRadmLetter2.length; rw++) {

if (genRadmLetter2[rw] == guessedLetter) {

genRadmLetter[rw] = guessedLetter;
found = true;

}

}

if (!found) {
System.out.println("Wrong letter, try again.");
counter = counter - 1;
System.out.println("Lives left: " + counter);
}

}

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

if (counter == 0) {
break;
}

} while (counter != 0);

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

}

}

关于java - 如何创建基于Java文本的刽子手游戏等问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23799013/

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