2

私は絞首刑執行人のアプリケーションを書くのに忙しく、現在いくつかのコードが機能するかどうかを確認しています...今は単語部分をまだ隠していないので、そのコードの代わりに if ステートメントを補助コードとして使用しました:

 if(original.indexOf(button.getText())!=-1){
                 JOptionPane.showMessageDialog(null, "Your word does contain" + text );
             }
             else{
                 JOptionPane.showMessageDialog(null, "There is no" + text );
                 error++;
             }
             }

とにかく、単語にないボタンを押すと、エラーに追加されると思われます

error++;

単語の最初の文字のみが検索されます。D を押すと「はい、D があります」と表示されますが、A を押すと「いいえ、I はありません」と表示されます。

誰か助けてくれませんか

ここに私の完全なコードがあります

import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import javax.swing.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Random;
import java.util.List;

public final class Hangman extends JFrame implements ActionListener{
String original = readWord();
int error = 0;
String imageName;

JButton btnAddWord = new JButton("Add New Word");
JButton btnRestart = new JButton("Restart");
JButton btnHelp = new JButton("Help");
JButton btnExit = new JButton("Exit");

JLabel word = new JLabel(original);

static JPanel panel1 = new JPanel();
static JPanel panel2 = new JPanel();
static JPanel panel3 = new JPanel();
static JPanel panel4 = new JPanel();

public Hangman(){
    Container content =getContentPane();
    content.setLayout(new GridLayout(0,1));

   if(error >= 0) imageName = "hangman1.jpg";
   if(error >= 1) imageName = "hangman2.jpg";
   if(error >= 2) imageName = "hangman3.jpg";
   if(error == 3) imageName = "hangman4.jpg";
   if(error == 4) imageName = "hangman5.jpg";
   if(error == 5) imageName = "hangman6.jpg";
   if(error == 7) imageName = "hangman7.jpg";
    ImageIcon icon = null;
    if(imageName != null){
        icon = new ImageIcon(imageName);
    }
   JLabel image = new JLabel();
   image.setIcon(icon);

   btnAddWord.addActionListener(this);
   btnRestart.addActionListener(this);
   btnHelp.addActionListener(this);
   btnExit.addActionListener(this);

   panel2.add(image);
   panel3.add(word);
   panel4.add(btnAddWord);
   panel4.add(btnRestart);
   panel4.add(btnHelp);
   panel4.add(btnExit);

    for(char i = 'A'; i <= 'Z'; i++){
        String buttonText = new Character(i).toString();
        JButton button = getButton(buttonText);
        panel1.add(button);
    }
}

public JButton getButton(final String text){
   final JButton button = new JButton(text);
    button.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
             if(original.indexOf(button.getText())!=-1){
                 JOptionPane.showMessageDialog(null, "Your word does contain " + text );
             }
             else{
                 JOptionPane.showMessageDialog(null, "There is no " + text );
                 error++;
             }
             }
             });
             return button;
}
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;
}
}
public void actionPerformed(ActionEvent e){
    if(e.getSource() == btnAddWord){
        try{
            FileWriter fw = new FileWriter("Words.txt", true);
            PrintWriter pw = new PrintWriter(fw, true);

            String word = JOptionPane.showInputDialog("Please enter a word: ");

            pw.println(word);
            pw.close();
        }
        catch(IOException ie){
            System.out.println("Error Thrown" + ie.getMessage());
        }
    }
    if(e.getSource() == btnRestart){

    }
    if(e.getSource() == btnHelp){
        String message = "The word to guess is represented by a row of dashes, giving the number of letters and category of the word."
               + "\nIf the guessing player suggests a letter which occurs in the word, the other player writes it in all its correct positions."
               + "\nIf the suggested letter does not occur in the word, the other player draws one element of the hangman diagram as a tally mark."
               + "\n"
               + "\nThe game is over when:"
               + "\nThe guessing player completes the word, or guesses the whole word correctly"
               + "\nThe other player completes the diagram";
       JOptionPane.showMessageDialog(null,message, "Help",JOptionPane.INFORMATION_MESSAGE);
    }
    if(e.getSource() == btnExit){
        System.exit(0);
    }
}

public static void main (String [] args){
    Hangman frame = new Hangman();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 600);
    frame.add(panel1, BorderLayout.NORTH);
    frame.add(panel2, BorderLayout.CENTER);
    frame.add(panel3, BorderLayout.SOUTH);
    frame.add(panel4, BorderLayout.SOUTH);
}
}
4

2 に答える 2

3

私の最初の推測では、テキスト比較では大文字と小文字が区別されます。

"Dinosaur".indexOf("A")と同じではありません"Dinosaur".indexOf("a")

比較するときは、テキストを一般的なケースに変換することをお勧めします。

original.toLowerCase().indexOf(button.getText().toLowerCase())!=-1
于 2012-08-28T00:45:45.267 に答える
3

これは、ファイルから読み取っている単語が .xml 内のテキストと同じかどうかを正しくチェックしていないためですJButton。これを修正するには、いくつかの方法があります。

  1. @MadProgrammerが示唆したように。小文字と大文字の両方をカバーするために、いくつかのチェックを行ってください。

  2. Standardizingつまり、ファイルから読み取るときに、List<String> wordsすべてを 1 つのケースにまとめます。そうすれば、小文字か大文字かをチェックするという点であまり心配する必要はありません。したがって、この場合、次のように変更することをおString[] wordsLine = line.split(" ");勧めString[] wordsLine = line.toLowerCase().split(" ");ます。次に、単一の操作でのチェックは問題ないように見えます。String[] wordsLine = line.toUpperCase().split(" ");indexOf()

于 2012-08-28T00:59:54.620 に答える