1

这是我在这个网站上的第一个问题,所以我会尽量不成为一个完全的菜鸟..

我目前正在用java创建刽子手游戏。所以我的问题是如果给我们一个单词“ghost”并且ghost被替换为“_”,

hiddenWord = ghost.length();
for (i=0; i < ghost.lenth(); i ++)
System.out.print("_ ")

给我们一个输出

“_ _ _ _ _”

假设我们猜测字母“O”,字母“o”被猜测,我该如何替换`

"_ _ _ _ _" with 
"_ _ o _ _ "

我当前的类文件

public void pickWord()
    {
        String[] listOfWords;
        listOfWords = new String[10];
        listOfWords[0] = "shenanigans";
        listOfWords[1] = "conversely";
        listOfWords[2] = "octopus";
        listOfWords[3] = "dizzy";
        listOfWords[4] = "malicious";
        listOfWords[5] = "goosebumps";
        listOfWords[6] = "flying";
        listOfWords[7] = "staff";
        listOfWords[8] = "xylophone";
        listOfWords[9] = "zapping";
        Random generator = new Random();
        int lineNumber = generator.nextInt(9);
        disguisedWord = listOfWords[lineNumber];


    }   
    public void displayMark()
    {
        for( int i = 0; i < disguisedWord.length(); i ++)
            underscore = underscore + "_ ";
        System.out.println(underscore);

    }
    public void makeGuess() throws IOException
    {
        System.out.println("Your word is " + disguisedWord.length() + " letters long.");
        System.out.println("Feel free to guess a letter.");
        guess = (char)System.in.read();
4

4 回答 4

0

为什么不使用另一个真/假值数组来标记哪些字母已被猜到,哪些字母仍然未知?我不认为使用正则表达式和字符串替换是让刽子手工作的简单方法,尤其是当他们猜测另一个字母时。

可能是这样的。

String answer = "someword";
boolean[] knownLetters = new boolean[answer.length()];
for (int i = 0; i < answer.length(); i++) {
    if(knownLetters[i]) {
        System.out.print(answer.charAt(i));
    } else {
        System.out.print("_");
    }
}
System.out.println("");
于 2012-11-12T10:09:52.783 回答
0

最简单的方法是在目标词上使用 Java 正则表达式。因此,每当用户输入字母时,您都会在正则表达式匹配中查找该字母。该匹配将为您返回匹配字符的索引,然后您可以使用它来替换__字符串版本中的字母。

...    
    listOfWords[9] = "zapping";
    Random generator = new Random();
    int lineNumber = generator.nextInt(9);
    disguisedWord = listOfWords[lineNumber];
    char[] hidden = disguisedWord.replaceAll("*","_").toCharArray();
}

public void makeGuess() throws IOException {
    System.out.println("Your word is " + disguisedWord.length() + " letters long.");
    System.out.println("Feel free to guess a letter.");
    String guess = System.in.read();

    Pattern pat = new Pattern(guess);
    Matcher mat = pat.matcher(disguisedWord);
    while (mat.find()) {
        int start = mat.start();
        hidden[start] = guess.toCharArray()[0];
    }
}
于 2012-11-12T10:01:28.660 回答
0
String ghost = "ghost";
String input = "o";
for (int i = 0; i < ghost.length(); i++) {
    if (String.valueOf(ghost.charAt(i)).equalsIgnoreCase(input)) {
        System.out.print(input + " ");
    } else {
        System.out.print("_ ");
    }
}

您可以使用三元运算符简化if 语句:

System.out.print(String.valueOf(ghost.charAt(i)).equalsIgnoreCase(input) ? input + " " : "_ ");
于 2012-11-12T10:03:42.113 回答
0

我认为最简单的方法是将状态存储在变量中,并通过循环现实世界替换匹配的字符。

private String word; 
private char[] state;

public void guess(char input){
    for (int i = 0; i < word.length(); i++) {
        if (word.toLowerCase().charAt(i) == input){
            state[i] = word.charAt(i);
        }
    }
}

之后您可以打印“状态”的内容。

于 2012-11-12T10:21:34.457 回答