0

それで、私はハングマン (ha.) と呼ばれるこのまったく新しい、聞いたことのないゲームのプログラムを書いています。(ボタンを押すことによって) 正しい文字が推測され、隠された単語を表すダッシュの行に正しい文字が表示された時点で立ち往生しています。このループを実行すると、テスター ポップアップに "Match!---" または現在の秘密の単語に含まれるダッシュの数が表示されます。文字通り、replaceAll が実際には置き換えられないかのようです! 私は休憩なしで何時間もこれに悩まされてきたので、それが私が見逃していることが非常に明白であっても驚かないでしょう.

JButton btnA = new JButton("A\n");
btnA.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        String letter = "a";
        char ch = 'a';
        if (go.getWordInQuestion().contains(letter)) {
            for(int i = 0; i<go.getWordInQuestion().length(); i++) {
                //Replace dashes with correctly guessed letter              
                if(go.getWordInQuestion().charAt(i)== 0)
                    go.getGuessLength().replaceAll("[^" + letter + "]", "_").charAt(i);
            }
            //check to see what the new value of the "hidden word" getGuessLength looks like                
            JOptionPane.showMessageDialog(null, "Match! " + go.getGuessLength());
            txtGuess.setText("" + go.getGuessLength()); 
        } else
            JOptionPane.showMessageDialog(null,"No Match :(");
    }
});

*****編集******** わかりましたので、進歩しました(と思います)。ダッシュを文字に変更するループを作成しました!! 唯一の問題?それらすべてを変更します。-___- それで、ボタン A を押すと、一致するものがあれば --- ではなく、aaa と表示されます。この問題はおそらく非常に初歩的なものであることは間違いありませんが、Javaに関しては、私は学習が遅いです! 私はすべての肯定的で有益なフィードバックに感謝します!

JButton btnA = new JButton("A\n");
btnA.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        String letter = "a";
        StringBuilder guessA = new StringBuilder('a');
        for(int i = 0; i<go.getGuessLength().length();i++) {
            if(go.getWordInQuestion().charAt(i)=='a') {
                String partialWord = go.getGuessLength().replace("-", letter);
                txtGuess.setText(partialWord);
                JOptionPane.showMessageDialog(null,"Match! " + partialWord);
            }
        }
    }
});

*****2つ編集*****

大丈夫!皆さんの助けのおかげで、私は最終的に問題を解決したと思います! ユーザーが「A」ボタンを押したときに、隠し単語に A がある場合、ダッシュに正常に置き換えられるようになりました。ウーフー!

btnA.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        String letter = "a";
        StringBuilder guessA = new StringBuilder(go.getGuessLength());
        if(go.getWordInQuestion().contains(letter)) {
            for(int i = 0; i<go.getGuessLength().length();i++) {
                if(go.getWordInQuestion().charAt(i)=='a') {
                    StringBuilder partialWord = guessA.replace(i,i+1, letter);
                    txtGuess.setText(guessA.toString());
                    JOptionPane.showMessageDialog(null,"Match! " + partialWord);
                }
            }
        } else
            JOptionPane.showMessageDialog(null, "Incorrect");
    }
});
4

2 に答える 2

1

このコード行は何もしません:

go.getGuessLength().replaceAll("[^" + letter + "]", "_").charAt(i);

replaceAll()文字列を変更しません (Java では文字列は不変です)。文字が置き換えられた新しい文字列を返します。この新しい文字列を呼び出しcharAt(i)ており、この文字では何もしません。

于 2013-03-16T13:09:11.630 に答える
0

replaceAll()置換のターゲットとして正規表現を使用します。おそらくreplace()、すべての一致を置き換えますが、ターゲットにプレーン文字を使用する .

とはいえ、最も簡単な解決策はreplaceAll()、推測された文字を使用して、他のすべての文字と一致する正規表現に変換する 1 行のコードです。

与えられた:

String word = "foo"; // the word people are trying to guess
String guesses = "one"; // the characters guessed so far

必要な出力を生成する 1 行を次に示します。

String display = word.replaceAll("[^" + guesses + "]", "-");

上記の値で実行すると、 にdisplayなります-oo

于 2013-03-16T21:13:56.303 に答える