-4

大学の課題をやろうとしていますが、テキスト ファイルから読み取り、リストからランダムな単語を選択する方法がどこにもありません。割り当ては絞首刑執行人に関するもので、プログラムはリストからランダムな単語を選択することを想定しています

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Hangman extends JFrame
{
int i = 0;
static JPanel panel;
static JPanel panel2;
static JPanel panel3;

public Hangman()
{
JButton[] buttons = new JButton[26];

panel = new JPanel(new GridLayout(0,9));
panel2 = new JPanel();
panel3 = new JPanel();

JButton btnRestart = new JButton("Restart");
btnRestart.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {

    }
});

JButton btnNewWord = new JButton("Add New Word");
btnNewWord.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
{
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());
}
}
});

JButton btnHelp = new JButton("Help");
btnHelp.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e)
   {
       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);
   }
});

JButton btnExit = new JButton("Exit");
btnExit.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
        System.exit(0);
    }
});

ImageIcon icon = new ImageIcon("D:\\Varsity College\\Prog212Assign1_10-013803\\images\\Hangman1.jpg");
JLabel label = new JLabel();
label.setIcon(icon);
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]);
}

panel2.add(label);

panel3.add(btnRestart);
panel3.add(btnNewWord);
panel3.add(btnHelp);
panel3.add(btnExit);
}
public void readFromFile()
{
try
{
    BufferedReader reader = new BufferedReader(new FileReader("Words.txt"));
}
}

public static void main(String[] args) 
{
    Hangman frame = new Hangman();
    Box mainPanel = Box.createVerticalBox();
    frame.setContentPane(mainPanel);
    mainPanel.add(panel, BorderLayout.NORTH);
    mainPanel.add(panel2);
    mainPanel.add(panel3);
    frame.pack();
    frame.setVisible(true);
}

}
4

3 に答える 3

4

ファイルの単語を に読み込むメソッドを作成しますList。例:

List<String> words = readFile();

単語を取得するString#split(" ")には、行を単語に分割するために使用します。それらの単語をリストに追加します。次に、次を使用します。

Random yourRandom = new Random(words.size());
String word = words.get(yourRandom.nextInt());

そして、リストからランダムな単語を取得します。

于 2012-08-19T16:57:15.483 に答える
1

これにどのようにアプローチできるかについての簡単なガイドを次に示します。

たとえば、スキャナーを使用して、配列に読み取ります。

Scanner scanner = new Scanner(new File("words.txt"));
while(scanner.hasNext()){
  // add scanner.nextLine() words to array 
}

配列が入力された後、単語を選択する前にシャッフルできます。

Collections.shuffle(wordList);
String pickWord = wordList.get(0);

ここではリストの最初のエントリを使用していますが、ランダムに選択することもできます。

于 2012-08-19T17:07:12.370 に答える
1

関数を使用してReadLine()、テキスト ファイルから各行を読み取ることができます。これにより、 で使用できる文字列が返されますfileLine.split(" ")。これにより、各要素がファイル内の単語として配列されます。

リストのこれらすべてを追加すると、サイズを取得して 0 から の間の乱数を選択し、size()これを使用してコレクションの文字列を取得できます。

これで、読み取ったばかりのファイルからランダムな単語が得られました。

サンプルコード:

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(" ");
        for(String word : wordsLine) {
            words.add(word);
        }
        line = reader.readLine();
    }

    Random rand = new Random(System.currentTimeMillis());
    String randomWord = words.get(rand.nextInt(words.size()));
} catch (Exception e) {
    // Handle this
}
于 2012-08-19T16:56:23.503 に答える