Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用数组将问号替换为猜测的字母_Java_Regex - Fatal编程技术网

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