从文本文件中随机选择一个单词

我正在尝试为大学完成我的作业,没有哪里可以找到一种方法从文本文件中读取并从列表中选择一个随机单词! 该任务是关于hangman的,该程序假设从列表中选择一个随机单词

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); } } 

创建一个方法将文件的单词读入List 。 例如:

 List words = readFile(); 

要获得单词,请使用String#split(" ")将行拆分为单词。 将这些单词添加到列表中。 然后使用:

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

你会从列表中得到随机单词。

以下是如何处理此问题的简要指南:

读取数组,使用,说扫描仪:

 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); 

我在这里使用列表中的第一个条目,但你可以随机选择一个。

您可以使用ReadLine()函数从文本文件中读取每一行。 这将返回一个可以与fileLine.split(" ")一起使用的字符串。 这将为您提供一个数组,其中每个元素都作为文件中的单词。

如果添加List的所有这些,则可以获取大小并选择0和size()之间的随机数,然后使用它来获取集合的String。

您现在从您刚刚阅读的文件中有一个随机单词。

示例代码:

 try{ BufferedReader reader = new BufferedReader(new FileReader("Words.txt")); String line = reader.readLine(); List words = new ArrayList(); 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 }