如何使用Java JFrame从.txt中读取随机单词

时间:2015-11-27 19:26:14

标签: java random jframe

我的程序需要从.txt文件中读取包含大量单词(在不同行中)的随机单词。

我可以从数组中选择一个随机单词,但我还没有找到如何从.txt文件中读取随机单词。

public class GuessForm extends javax.swing.JFrame {
    String[] FindWord1 = {"hello", "hey", "well", "story", "fight","punch"};
    int idx = new Random().nextInt(FindWord1.length);
    String FindWord = (FindWord1[idx]);
    int wordL = FindWord.length();
    // ...

我尝试了以下操作,但它不起作用:

import java.util.Random;
import java.io.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.BufferedReader;
import java.util.Scanner; 

public class GuessForm extends javax.swing.JFrame {
    String filename = "H:\\lol.txt";
    File file = new File (filename);
    Scanner input = new Scanner new FileReader(file));
    while (input.hasNext()) {
        String FindWord1 = input.next();
    }
    int idx = new Random().nextInt(FindWord1.length);
    String FindWord = (FindWord1[idx]);
    int wordL = FindWord.length();
}

1 个答案:

答案 0 :(得分:0)

如果您阅读许多单词,最简单的方法就是将整个文件读入内存并将其存储在数组中。

如果您只检查一次,那么您可以通过只阅读一次而不构建任何数据结构来节省一些时间。请注意,它使用了很多对Random对象的调用。

public String randomWord(String file)
{
    BufferedReader reader = new BufferedReader(new FileReader(file));
    int i = 1;
    Random r = new Random();
    String line, out;
    while((line = reader.readLine()) != null)
        if(r.nextDouble() < (1.0 / i++))
            out = line;
    return out;
}

您需要添加一些try / catch或其他异常处理,但这样的事情应该起作用

这种获取随机元素的方法主要用于迭代器/ LinkedLists /文件