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

时间:2014-12-18 14:33:41

标签: java arrays file-io try-catch

我有一个.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不能等于一个String,所以我应该如何将生成的整数与我所拥有的.txt文件中的单词对应?

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

3 个答案:

答案 0 :(得分:2)

尝试这样的事情:

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

现在您的单词将存储在单词arraylist中,您可以使用随机数字访问:

    words.get(randomNumber);

答案 1 :(得分:1)

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

我建议将fileName设置为动态(例如,向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的静态访问,因此您必须初始化该对象,并且最初会读取该文件。

<强> randomInteger: 我更改了计算它的功能,所以它采用了列表的大小,如果你想稍后添加更多的单词,它是灵活的。 方法Math.random()将永远不会返回1,因此对于87个元素,数字将介于0和(在您的示例中)86.999之间...其中,转换为int将仅截断小数部分。

<强>屏幕取词: 该方法取出随机值作为单词列表中的位置指示符。 然后它会从列表中获取随机单词并最终返回。

<强> READFILE: 几乎你已经做了什么,我添加了一个null和空字符串的检查,然后它将该字添加到稍后返回的数组。 据我所知,Java并不关心你在路径中使用什么斜线,我从依赖于操作系统的路径切换到始终使用&#39; normal&#39;在某一点上削减......

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

答案 2 :(得分:0)

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