1

これはこのサイトでの私の最初の質問なので、完全な初心者にならないようにします。

私は現在、Javaで絞首刑執行人のゲームを作成しています。ですから、あなたへの私の質問は、「ゴースト」という単語が与えられ、ゴーストが「_」に置き換えられているかどうかです。

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

これを行う最も簡単な方法は、ターゲットワードで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 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

最も簡単な方法は、状態を変数に格納し、現実の世界をループして一致する文字を置き換えることだと思います。

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 に答える