如何从.txt文件中读取填充的数组



我有一个.txt文件,里面装满了87个四个字母的单词。我本质上是在制作一个刽子手游戏,其中用户启动游戏,并在 0 到 86 之间生成一个随机数,然后程序转到.txt文件并挑选出该单词供用户猜测。这是我第一次尝试这样做,因为我是一名新的编程学生,我正在使用的书几乎没有帮助。所以。。。这是我为此所做的:

class ReturnRandomInteger {
    public int randomInteger() {
        int randomInt = 0;
        for (int i = 0; i < 1; i++) {
        randomInt = (int) (Math.random() * 86) + 0;
    }
return randomInt;
}
    public static String getWord(int randomInt, String line) {
        FourLetterWords newObject = new FourLetterWords();
        if (randomInt == String line)
    }
}
class FourLetterWords {
    public static void readFile() {
    try {
        String fileName = "C//FourLetterWords.txt";
        File fourLetterWords = new File(fileName);
        Scanner in = new Scanner(fourLetterWords);
        ArrayList<FourLetterWords> words = new ArrayList<>();
        while (in.hasNextLine()) {
            String line = in.nextLine();
        }
    } catch (FileNotFoundException ex) {
    System.out.println("File not found.");
    }
}
}

首先,我不知道我的尝试和捕获是否正确。该文件的名称是FourLetterWords.txt。如果错误,我想知道读取.txt文件中每一行的正确方法是什么。现在在我的 ReturnRandomInteger 类中,我从我的 FourLetterWords 类创建了新对象,您可以看到我正在尝试做的是拥有它,以便如果用户生成的随机整数等于 .txt 文件中的相应行,那么它将返回该行中的单词。显然,int 不能等于字符串,那么我应该如何对应生成的整数与我拥有的.txt文件中的单词?

我将非常感谢我能得到的任何帮助。

尝试这样的事情:

    String fileName = "C:\FourLetterWords.txt";
    File fourLetterWords = new File(fileName);
    Scanner in = new Scanner(fourLetterWords);
    ArrayList<String> words = new ArrayList<String>();
    while (in.hasNextLine()) {
        words.add(in.nextLine());
    }

现在,您的单词将存储在单词数组列表中,您可以使用随机数访问,例如:

    words.get(randomNumber);

由于整个随机数部分几乎只有一行代码,并且getWord 方法在逻辑上不应该在提供随机数的类中,我把一个类放在一起来完成整个工作。

我建议也使文件名动态化(例如,向 RandomWordProvider 构造函数添加一个参数(,但决定不使用它以使其更简单一些。

class RandomWordProvider {
    private List<String> words;
    public RandomWordProvider() {
        words = readFile();
    }
    private int randomInteger() {
        int randomInt = (int) (Math.random() * words.size());
        return randomInt;
    }
    public String getWord(int randomInt, String line) {
        int randomPosition = randomInteger();
        String randomWord = words.get(randomPosition);
        return randomWord;
    }
    private List<String> readFile() {
        List<String> wordsList = new ArrayList<>();
        try {
            String fileName = "C:/FourLetterWords.txt";
            File fourLetterWords = new File(fileName);
            Scanner in = new Scanner(fourLetterWords);
            while (in.hasNextLine()) {
                String line = in.nextLine();
                if (line!=null && !line.isEmpty()) {
                    wordsList.add(line);
                }
            }
        } catch (FileNotFoundException ex) {
            System.out.println("File not found.");
        }
        return wordsList ;
    }
}

我删除了对getWord的静态访问,因此您必须初始化对象并且文件最初会被读取。

随机整数:我更改了函数来计算它,因此它采用列表的大小,并且如果您以后想添加更多单词,它会很灵活。Math.random(( 方法永远不会返回 1,因此对于您的 87 个元素,该数字将介于 0 和(在您的示例中(86.999 之间...其中转换为 int 将只切断小数部分。

获取单词:该方法获取一个随机值作为单词列表中的位置指示器。然后,它会从您的列表中获取随机单词并最终返回它。

读取文件:几乎你已经做了什么,我添加了对空和空字符串的检查,然后将单词添加到稍后返回的数组中。据我所知,Java 不太关心你在路径中使用什么斜杠,我从依赖于操作系统的路径切换到总是在某一点使用"正常"斜杠......

这是干编码的,所以我希望我没有错过任何东西,我特别没有检查使用扫描仪读取行的整个部分...... :)为了使它更容易理解,我决定编写比必要的更多的代码行,如果需要,可以在一行中完成randomInteger((和getWord(;)

创建一个Strings数组(假设,你把它命名为words[](。在程序开始时,从文件中一一行地读取行,并将它们存储在数组中(words[i++]=line(。现在,当您需要选择一个单词时,只需执行 word = words[randomInt] .

最新更新