当前位置: 首页 > 知识库问答 >
问题:

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

从景曜
2023-03-14

我试图开发一个刽子手作为作业,但无法从文本文件中随机获得一个单词(其中有各种单词,每个单词之间用空格分隔)。我编写了一个代码来获取一个随机单词,但无法选择一个单词并用示例字符串(string w=“this”)替换它我在“Function()”中找到了。

 public String randomWord(String wordran) {

    try {
        BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\Admin\\Documents\\NetBeansProjects\\Main\\words.txt"));
        String line = reader.readLine();
        List<String> words = new ArrayList<String>();
        while (line != null) {
            String[] wordline = line.split(" ");
            for (String word : wordline) {
                words.add(word);
            }
            Random rand = new Random();
            String randomWord1 = words.get(rand.nextInt(words.size()));
            //System.out.println("rand word : " + randomWord1);

        }
        reader.close();

    } catch (Exception e) {

    }
    return wordran;


}


   public void function(){

    int numGuesses = 10;
    String w = randomWord();

    String[] word = w.split("");
    ArrayList< String> wList = new ArrayList<>(Arrays.asList(word));
    ArrayList< String> wAnswer = new ArrayList< String>(wList.size());
    for (int i = 0; i < wList.size(); i++) {
        wAnswer.add("_ ");
    }
    int left = wList.size();
    Scanner scanner = new Scanner(System.in);
    boolean notDone = true;
    ArrayList< String> lettersGuessed = new ArrayList< String>();

    while (notDone) {
        System.out.println();
        String sOut = "";

        List< String> lettersLeft = getRemainingLetters(lettersGuessed);
        for (String s : lettersLeft) {
            sOut += s + " ";
        }
        System.out.println("Letters Left: " + sOut);

        sOut = "";
        for (int i = 0; i < wList.size(); i++) {
            sOut += wAnswer.get(i);
        }
        System.out.println(sOut + " Guesses left:" + numGuesses);
        System.out.print("Enter a letter(* exit): ");
        String sIn = scanner.next();
        numGuesses--;
        if (sIn.equals("*")) {
            break;
        }
        lettersGuessed.add(sIn);
        for (int i = 0; i < wList.size(); i++) {
            if (sIn.equals(wList.get(i))) {
                wAnswer.set(i, sIn);
                left--;
            }
        }
        if (left == 0) {
            System.out.println("Congradulations you guessed it!");
            break;
        }
        if (numGuesses == 0) {
            System.out.println("You failed...:(");
            break;
        }

    }

}

public static void main(String[] args) throws IOException {
    Main ma = new Main();

    ma.function();

    loadWords();

   // ma.randomWord();

}

共有1个答案

岳泉
2023-03-14

您的代码有三个问题:

  1. 你不需要传递参数,String wordran来存储随机单词。一个有用的参数可以是String path,通过它可以将文件的路径传递给函数。
  2. 您错过了从循环中的文件中读取内容。你只读了第一行。
  3. 您还没有返回通过应用Random#nextInt计算的随机单词。

另一方面,我建议您使用try with resources语法来避免显式关闭BufferedReader

下面给出了包含这些注释的正确代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Main {
    public static void main(String[] args) throws IOException {
        // Test
        System.out.println(getRandomWord("C:\\Users\\Admin\\Documents\\NetBeansProjects\\Main\\words.txt"));
    }

    public static String getRandomWord(String path) throws IOException {
        List<String> words = new ArrayList<String>();
        try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
            String line;
            while ((line = reader.readLine()) != null) {
                String[] wordline = line.split("\\s+");
                for (String word : wordline) {
                    words.add(word);
                }
            }
        }
        Random rand = new Random();
        return words.get(rand.nextInt(words.size()));
    }
}
 类似资料:
  • 问题内容: 我正在尝试建立一个用户可以提交照片的网站,然后在另一个页面上一个一个地随机查看其他照片。我有一个名为“上传”的目录,其中提交了图片。我无法从文件中读取图片。我只想从目录上传中随机选择一张图片,并将其显示在页面上。任何建议表示赞赏。 问题答案: 您可以使用glob获取目录中的所有文件,然后从该数组中获取随机元素。这样的函数将为您完成此任务:

  • 例如:是Firestore中的一个集合,我在该集合中有1000名学生,我的要求是在每次调用中随机选择10名学生。

  • 问题内容: 从Python目录中选择随机文件的最佳方法是什么? 编辑: 这是我在做什么: 这是特别糟糕,还是有一种更好的方法? 问题答案: 关于您编辑过的问题:首先,我假设您知道使用a的风险,以及从2.6开始不推荐使用并在3.0中删除的事实。 第二,我看不到这里存在任何比赛条件。您的对象基本上是不可变的(在缓存目录列表之后,再也不会读取它),因此并发读取它不会造成任何危害。 除此之外,我不明白为什

  • 问题内容: 到目前为止,我已经弄清楚了如何导入文件,创建新文件以及使列表随机化。 我在从列表中随机选择50个项目以写入文件时遇到麻烦吗? 因此,如果总随机文件为 我想要3个文件(out_file1 | 2 | 3),其中第一个随机集为3,第二个随机集为3,第三个随机集为3(在此示例中,但我要创建的文件应该有50个) 因此,不会包含最后一个“ 4”,这很好。 如何从随机选择的列表中选择50? 更好的