无法更新输出



我试图写一个代码来玩hangman,它是正常工作的,但每次当我输入一个字符,它重置我的输出。谁能帮帮我。

我代码:

import java.util.*;
public class game
{
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
String list[] = {"apple", "banana", "mango", "kiwi", "coconut", "papaya", "lichi", "strawberry", "orange", "cherry"};
int rand = (int)(Math.random()*9)+0;
String word = list[rand];
String ask = "_";
for(int i = 1; i < word.length();i++){
ask = ask + "_";
}
System.out.println(ask);
System.out.println("hint: It is a fruit");
for (int j = 1; j<=15; j++){
System.out.println("Enter a character: ");
char input = in.next().charAt(0);
for (char i : word.toCharArray()){
if(input == i){
System.out.print(input);
continue;
}
System.out.print("_");
}
}
}
}

输出的一小部分:

______
hint: It is a fruit
Enter a character: 
a
__a___
Enter a character: 
o
o_____
Enter a character: 
r
_r____
Enter a character: 
n
___n__
Enter a character: 

当我输入'a'时,它正确打印它,但当我输入其他字符时,它打印该字符而不是'a'。谁能告诉我我该怎么做才能得到正确的输出?

看起来您并没有保存添加到游戏中的字符字符串,您只是打印它。您可能想要做一些事情,比如将新字符添加到字符串变量_ask中,而不是在运行时打印,然后在for循环运行后打印。基本上,您不需要将过去的回合存储在任何地方。

我认为,在循环for (char i : word.toCharArray())中,

您应该将字符添加到ask(或有另一个名为ans的字符串变量),

,然后在循环结束时打印ask


因为你没有更新ask的值并打印字符在字符串中的位置,当循环第二次运行时,它不会显示u输入的最后一个字符

加上你可以有特定的提示根据水果名称使用开关大小写

,也许有一个错误弹出当玩家输入错误的字符

正如在另一个答案中提到的,您需要记住以前尝试过的字符。例如,可以这样做:

String tempAsk = "";
for (char i : word.toCharArray()){
if(input == i){
tempAsk += i;
} else {
tempAsk += ask.charAt(i);
}
}
ask = tempAsk;
System.out.println(ask);

您可以使用字符数组来检查到目前为止存在的字母,如下所示:

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String list[] = {"apple", "banana", "mango", "kiwi", "coconut", "papaya", "lichi", "strawberry", "orange", "cherry"};
int rand = (int)(Math.random()*9)+0;
String word = list[rand];
// Create a character array to store the result so far
char[] result = new char[word.length()];
//Fill the array with _
Arrays.fill(result, '_');
System.out.println(new String(result));
System.out.println("hint: It is a fruit");
int numChances = 15;
for (int j = 1; j <= numChances; j++){
System.out.println("Enter a character: ");
char input = in.next().charAt(0);
for (int i = 0; i < word.length(); i++) {
if(word.charAt(i) == input){
//update the array with user's correct response
result[i] = input;
}
}
// Check how we're doing so far. Make a string with the result
String untilNow = new String(result);
// Show user what we have so far
System.out.println(untilNow);

//Check if the user has guessed the word. 
if(untilNow.equalsIgnoreCase(word)) {
System.out.println("You win...");
break;
}
}
}

最新更新