Я пишу приложение для изучения английского языка для Android.Android: случайное число не очень случайное
Чтобы получить случайное слово я использую:
Random rnd = new Random();
final int rnd.nextInt(WordsNumber);
Чтобы получить случайное направление (показать слово или показать перевод) Я использую:
Random rnd = new Random();
final boolean dir.nextBoolean();
Но я вижу, что через слова не распределены равномерно , Я тестирую приложение с 17 словами. Несколько слов показаны 10 раз, некоторые показаны только один раз. Такая же проблема с направлением. Это часто случается, так как пятое последовательное временное направление одно и то же.
Возможно, кто-то знает, как сделать распределение слов более равным?
UPD: Я написал тестовое приложение. Он генерирует новый номер на нажатии кнопки:
public class About extends Activity
{
final int N = 10;
int[] results;
Random rnd;
int total;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
results = new int[N];
for (int i = 0; i < N; i++)
{
results[i] = 0;
}
rnd = new Random();
total = 0;
}
public void GenerateNumber(View view)
{
int number = rnd.nextInt(N);
results[number]++;
total++;
String output = new String();
TextView txt = (TextView)findViewById(R.id.text1);
output += "Total numbers: " + String.valueOf(total) + "\n";
for (int i = 0; i < N; i++)
{
output += String.valueOf(i) + ": " + String.valueOf(results[i]) + "\n";
}
txt.setText(output);
}
}
Вот результаты теста:
Может быть, с N = 10000 она будет равна ... Но для моего приложения, это слабое утешение.
Скорее всего, это связано с эквивалентом Java [C# - генератор случайных чисел, генерирующий только одно случайное число] (http://stackoverflow.com/questions/767999/random-number-generator-only-generating-one-random-number/768001 # 768001) –
Напоминает мне об этом [http://xkcd.com/221/) один ... – tilpner
@StackOverflowException Сэр, ты сделал свой день. –