1

まず第一に、私はコードを求めているわけではありません...どうやって進めればいいのかわからないところまで来ました...誰かがハングマンのこのステップを開始する方法を説明してもらえますか? 私はすでにボタンの配列を持っています:

String  b[]={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
for(i = 0; i < buttons.length; i++) {
    buttons[i] = new JButton(b[i]);        
    panel.add(buttons[i]);
}

そして、私が隠そうとしている単語はリストから来ています:

public String readWord() {
  try {
    BufferedReader reader = new BufferedReader(new FileReader("Words.txt"));
    String line = reader.readLine();
    List<String> words = new ArrayList<String>();
    while(line != null) {
      String[] wordsLine = line.split(" ");
      boolean addAll = words.addAll(Arrays.asList(wordsLine));
      line = reader.readLine();
    }
    Random rand = new Random(System.currentTimeMillis());
    String randomWord = words.get(rand.nextInt(words.size()));
    return randomWord;
  } catch (Exception e) {
    return null;
  }
}

誰かが私を正しい方向に向けて、「-」で単語を非表示にすることができます. ユーザーが正しいボタンをクリックすると、文字が表示される必要があります...

それほど明確でない場合は、お詫び申し上げます。

4

3 に答える 3

7

この状況を解決するには、オブジェクトを使用するだけです。

public class HangmanWord {

    private static final char HIDECHAR = '_';

    private String original;     
    private String hidden;  

    public HangmanWord(String original) {
        this.original = original;
        this.hidden = this.createHidden();
    }

    private String createHidden() {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < this.original.length; i++) {
            sb.append(HIDECHAR);
        }
        return sb.toString();
    }

    public boolean check(char input) {
        boolean found = false;
        for (int i = 0; i < this.original.length; i++) {
            if (this.original[i].equals(input)) {
                found = true;
                this.hidden[i] = this.original[i];
            }
        }
        return found;
    }

    //getter and setter
}

ボタンをクリックすると、元の単語にあなたの文字が含まれているかどうかを確認できます。次に、隠し単語で文字を表示します。hidden[i] = original[i]. このカプセル化により、ソリューションがより明確になるはずです。

可能な用途:

public class TestClass() {

    public static void main(String[] args) {
        String secret = "stackoverflow";
        int wrongGuesses = 0;
        HangmanWord hngm = new HangmanWord(secret);
        System.out.println(hngm.getHidden()); // _____________
        if (hngm.check('a')) {
            System.out.println(hngm.getHidden()); // __a_________
        }
        else {
           wrongGuesses++;
        }
        //... and so on...
    }
}

これを理解するのに助けが必要な場合は、私に知らせてください。

于 2012-08-22T13:12:40.057 に答える
0

この問題が正しいかどうかは実際にはわかりませんが、押された文字が必要な文字列の1つのフィールドを置き換えることが問題である場合、最初に2つの文字列、元の単語、および1つを作成します(以下では「隠し文字列」と呼びます) は、元の Word に限り、"_" のみで構成されます。次に、押された文字が単語のどこにあるかを確認するロジックが必要です (文字列ビルダーを使用して、難しいことではありません)。その後、「隠し文字列」の適切なフィールドを文字に変更します。「隠し文字列」を表示するためにある種の TextField/-View を使用する GUI (ボタンがあるため、1 つあると仮定します) に文字を表示するには、TextField の以前のコンテンツを削除するだけです。新しい「隠し文字列」を書き出します。

それが役立つことを願っています...

編集: 2 つの文字列の代わりに 2 つの char-Array を実際に保存する方がはるかにエレガントであり、文字列に簡単に変換して書き出すこともできます。

于 2012-08-22T13:20:28.303 に答える
0

文字列、単語、および難読化されたもの (「-」を含むもの) の 2 つのコピーを保持します (できれば、char 配列または文字列ビルダーとして)。ユーザーが文字を推測したら、難読化されていないバージョンでその文字のすべてのインスタンスを検索します。一致が見つかるたびに、難読化された文字列のそのインデックスの「-」を正しい文字に変更します。

于 2012-08-22T13:13:45.197 に答える