Choosing a Random word from a text file

北城以北 提交于 2020-06-29 04:12:08

问题


I'm trying to develop a hangman as an assignment, and is unable to get one random word from a Text file(which has various words and each word is separated with a space). I've written a code to get a random word, but unable to pick one words and replace it, with the sample string (String w = "this";) i have in the "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:


There are three problems with your code:

  1. You don't need to pass the parameter, String wordran to store the random word. A useful parameter can be String path through which you can pass the path of the file to the function.
  2. You've missed reading the content from the file in the loop. You've read just the first line.
  3. You haven't returned the random word which you have calculated by applying Random#nextInt.

On a side note, I recommend you use try-with-resources syntax to get rid of closing BufferedReader explicitly.

Given below is the correct code incorporating these comments:

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


来源:https://stackoverflow.com/questions/62358012/choosing-a-random-word-from-a-text-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!