Как заполнить массив текстом из файла с помощью сканера, а затем случайным образом выбрать текст из массива? - PullRequest
0 голосов
/ 08 мая 2018

У меня есть текстовый файл со списком фильмов:

Kangaroo Jack
Superman
Shawshank Redemption
Aladdin

Что я хочу сделать, это передать все эти фильмы в массив, а затем случайным образом выбрать фильм из массива. Однако, кажется, всегда выбирают «Aladdin», и я не уверен, что я делаю неправильно? Как я могу случайно выбрать фильмы из массива?

public static void main(String[] args) throws FileNotFoundException {

    String[] movieList = {};
    File file = new File("xxx\\listofmovies.txt");
    Scanner fileScanner = new Scanner(file);
    Scanner scanner = new Scanner(System.in);
    Random random = new Random();

    while (fileScanner.hasNextLine()) {
        String line = fileScanner.nextLine();
        // Reads the whole file
        movieList = line.split("//s");
        //splits the string by white space characters meaning we will get the full word(s) per line
    }

    boolean weArePlaying = true;
    while (playing) {

        char[] randomWordToGuess = movieList[random.nextInt(movieList.length)].toLowerCase().toCharArray();
        int wordLength = randomWordToGuess.length;
        char[] playerGuess = new char[wordLength];
        boolean wordCompleted = false;
...
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

movieList = line.split("//s"); присваивает массиву только последний фильм, поэтому в массиве только один элемент. Вместо этого вам нужно прочитать каждую строку и назначить ее записи в массиве.

Может быть, что-то еще, как ...

String[] movieList = new String[4];
File file = new File("xxx\\listofmovies.txt");
Scanner fileScanner = new Scanner(file);
Scanner scanner = new Scanner(System.in);
Random random = new Random();

int index = 0;
while (fileScanner.hasNextLine()) {
    String line = fileScanner.nextLine();
    movieList[index] = line;
    index++;
}

Предполагается, что в файле всего 4 строки, в противном случае у вас будет IndexOutOfBoundsException.

Вы могли бы защититься от этого несколькими способами. Вы можете указать количество ожидаемых строк в качестве первой строки файла, а затем создать массив на основе этого, или вы можете выйти из while-loop, когда массив заполнен, или вы можете использовать ArrayList, который является типом динамический массив

0 голосов
/ 09 мая 2018

movieList = Line.Split("//") Эта строка всегда перезаписывает movielist последней строкой в ​​файле: Alladin

Скорее напишите это следующим образом:

ArrayList<String> movieList = new ArrayList<>();
while (fileScanner.hasNextLine()) {
    String line = fileScanner.nextLine();
    movieList.add(line);
}

Важно отметить, что ваш первоначальный подход был бы успешным, если бы все названия фильмов были в одной строке и не имели белой специи между их именами, например:

KangarooJack Superman ShawshankRedemption Aladdin

цикл также не был бы необходим. Так что можно было бы написать так:

String[] movieList = {};
String line = fileScanner.nextLine();
movieList = line.split("//s");

И если вы хотите стать действительно диким ...

String[] movieList = fileScanner.nextLine().split("//");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...