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

Без кода на данный момент, просто пытаюсь понять это, чтобы начать мой проект.Скажем, например, я создаю дерзкую игру.Каждый раз, когда пользователь нажимает кнопку вызова, он должен случайным образом выбрать вызов из файла задания, либо txt, либо CSV, и отобразить его в поле.

Лучший способ сделать это?

Ответы [ 3 ]

3 голосов
/ 08 июля 2019

Выбор строки из файла, равномерно случайным образом, может быть выполнен с использованием метода выборка из резервуара . Для каждой строки в файле выберите ее с вероятностью 1 / N, где N - это количество прочитанных строк, включая только что прочитанную строку. Тогда случайная строка - это последняя строка, выбранная таким образом.

2 голосов
/ 08 июля 2019

Я бы предложил вам прочитать все содержимое файла и сохранить его в объекте.После этого генерируйте случайное число каждый раз, когда пользователь нажимает кнопку.Самый простой способ - сохранить его в списке строк (List<String>), но если у вас есть другие данные, которые необходимо сохранить, например, у вас есть вызов и соответствующее разрешение, если пользователь не выполнил вызов, то вы можетесделать объект и сохранить его для объекта.Пример:

public class Dare {
    String dare;
    String sanction;
    // add more attributes if needed

    // constructors and getters and setters below

}

Тогда у вас может быть список Dare (List<Dare>).

1 голос
/ 08 июля 2019

Чтобы убедиться, что у каждого предмета есть равный шанс быть выбранным, вам нужно, как минимум, знать количество предметов (строк, в вашем случае) в момент создания случайного числа.

Для этого есть три основных варианта:

  • Сначала загрузите все свои данные из файлов данных и сохраните их в каком-то списке. Тогда у вас будет количество и доступные предметы, или

  • Храните информацию о количестве элементов в начале файла, чтобы вы могли хотя бы прочитать количество элементов и выбрать номер строки. Затем вам нужно будет прочитать правильную строку после выбора номера или

  • Убедитесь, что каждая запись (строка) в файле имеет фиксированную длину, и рассчитайте количество строк (и смещение к началу каждой) на основе размера файла и известной длины строки.

Существуют разные ситуации, в которых требуется каждая опция, но в вашем случае вариант 1 имеет смысл (а вариант 3 - наименьший). Я оставлю детали в качестве упражнения, но:

  1. Загрузка каждой строки из файла, сохранение в списке.
  2. Выберите случайное число n , в [0, длина списка) .
  3. Затем вы можете легко получить доступ к n -ому элементу в списке.

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

  1. Загрузка каждой строки из файла, сохранение в списке.
  2. Произвольно перемешивает элементы в списке.
  3. Пройдите случайный список по порядку.

Вот некоторые соответствующие ресурсы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...