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