在Java中使用数组将问号替换为猜测的字母
我的项目的前提是创建一个类似于刽子手的游戏,用户输入一个只包含字母和空格的短语,打印出该短语,但用问号代替字母,然后第二个用户猜测短语中可能包含的字母。我唯一要做的就是让猜出来的字母再次取代问号。现在,如果你猜到任何正确的字母,整个短语都会显示出来。这是我的更新方法。任何反馈都将不胜感激在Java中使用数组将问号替换为猜测的字母,java,regex,Java,Regex,我的项目的前提是创建一个类似于刽子手的游戏,用户输入一个只包含字母和空格的短语,打印出该短语,但用问号代替字母,然后第二个用户猜测短语中可能包含的字母。我唯一要做的就是让猜出来的字母再次取代问号。现在,如果你猜到任何正确的字母,整个短语都会显示出来。这是我的更新方法。任何反馈都将不胜感激 public static int updateTemplateArray(char [] tmpArr, String sPhrase, char guess) { int vowel = 0
public static int updateTemplateArray(char [] tmpArr, String sPhrase, char guess)
{
int vowel = 0;
for (int i = 0; i < sPhrase.length(); i++)
{
if(guess == sPhrase.charAt(i))
{
guess = tmpArr[i];
if (isVowel(guess))
{
vowel++;
}
}
}
return vowel;
} //end updateTemplateArray
public static int updateTemplateArray(char[]tmpArr,String sPhrase,char guess)
{
int元音=0;
对于(int i=0;i
编辑:我认为主要的问题可能在于不同的方法,这里是
public static void printTemplateArray(char [] tmpArr)
{
char [] qMark = new char[tmpArr.length];
for (int i = 0; i < tmpArr.length; i++)
{
if(tmpArr[i] == ' ')
{
qMark[i] = ' ';
}
else
{
qMark[i] = '?';
}
}
System.out.print(qMark);
}
公共静态void printTemplateArray(char[]tmpArr)
{
char[]qMark=新字符[tmpArr.length];
对于(int i=0;i
您的
guess = tmpArr[i];
应该是
tmpArr[i] = guess;
您可能还想删除System.out.println(tmpArr)代码>语句,因为它可能不应该是更新方法的一部分(特别是作为循环的一部分)。在该方法之后调用它以查看由tmpArr
表示的数组上的结果
简化演示:
public static void updateTemplateArray(char[] tmpArr, String sPhrase, char guess) {
for (int i = 0; i < sPhrase.length(); i++) {
if (guess == sPhrase.charAt(i)) {
tmpArr[i] = guess;
}
}
}
...
String phrase = "foo bar";
char[] arr = new char[phrase.length()];
Arrays.fill(arr, '?');
//guessing time
updateTemplateArray(arr, phrase, 'f');
System.out.println(arr);
updateTemplateArray(arr, phrase, 'b');
System.out.println(arr);
updateTemplateArray(arr, phrase, 'x');
System.out.println(arr);
重新编辑:
在您的printTemplateArray(char[]tmpArr)
方法中,您只需创建一个新数组,该数组填充空格或?
。因此,它无法打印这两个字符对应的其他字符。
如果您希望此方法仅使用?
字符隐藏,这些字符不是空格,并且不会被第二个玩家猜到,那么您应该将该玩家的猜测存储在某个位置,并传递给您的方法(Set
似乎是该玩家的正确集合)。因此,更正后的代码可能如下所示:
public static void printTemplateArray(char[] tmpArr,
Set<Character> guesses) {
char[] qMark = new char[tmpArr.length];
for (int i = 0; i < tmpArr.length; i++) {
if (tmpArr[i] == ' ') {
qMark[i] = ' ';
} else if (guesses.contains(tmpArr[i])) {
qMark[i] = tmpArr[i];// copy already guessed char
} else {
qMark[i] = '?';
}
}
System.out.print(qMark);
}
公共静态void printTemplateArray(char[]tmpArr,
(设置猜测){
char[]qMark=新字符[tmpArr.length];
对于(int i=0;i
您能否为我们提供函数的典型输入及其预期输出?如果用户1输入“hello world”,它将首先输出“hello world”。然后,如果第二个用户猜到“o”,那么输出应该是“???o?o???”您是否将正确的字符串输入到sPhrase中了?是的。这是一个扫描器输入很好的调用,不幸的是它仍然做同样的事情我刚刚试过你的演示,它仍然打印出原始阵列,没有问号,我想现在我想这是有道理的。我怀疑你的问题在你发布的方法之外,这意味着我无法帮助你,除非看到让我复制它的示例。你是对的,我想我现在明白了。谢谢@达科他州如果您有其他问题,而您当前的问题不允许我们重复,则可以(1)更新您的问题,以便我们可以创建完整答案(2)删除您的问题,如果您不认为当前形式的问题无法帮助将来的任何人(3)解决您问题当前版本中描述的问题。
public static void printTemplateArray(char[] tmpArr,
Set<Character> guesses) {
char[] qMark = new char[tmpArr.length];
for (int i = 0; i < tmpArr.length; i++) {
if (tmpArr[i] == ' ') {
qMark[i] = ' ';
} else if (guesses.contains(tmpArr[i])) {
qMark[i] = tmpArr[i];// copy already guessed char
} else {
qMark[i] = '?';
}
}
System.out.print(qMark);
}