我正在尝试为大学做作业,而且我无论在哪里都能找到从文本文件中读取并从列表中选择随机单词的方法!该任务是关于刽子手的,该程序假设从列表中选择一个随机词
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);
}
}
答案 0 :(得分:4)
创建一个方法,将文件的单词读入List
。例如:
List<String> words = readFile();
要使用String#split(" ")
来将单词拆分为单词。将这些单词添加到列表中。然后使用:
Random yourRandom = new Random(words.size());
String word = words.get(yourRandom.nextInt());
你会从列表中得到随机字样。
答案 1 :(得分: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);
我在这里使用列表中的第一个条目,但你可以随机选择一个。
答案 2 :(得分:0)
您可以使用ReadLine()
函数从文本文件中读取每一行。这将返回一个可以与fileLine.split(" ")
一起使用的字符串。这将为您提供一个数组,其中每个元素都作为文件中的一个单词。
如果添加List的所有这些,则可以获取大小并选择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
}