我最近开始学习编程移动应用程序。 我正在做一些练习,编写基本程序。 首先我使用LibGDX,所以首先我在桌面上测试我的应用程序然后在android上测试它。
在我的程序中,它必须从0,1,2生成3个随机数(只要它们是随机的,它们可以是相同的数字)。在桌面上我的程序运行正常,每次运行它时会生成3个随机数。但是,当我在我的Android手机上试用它时,所有三个数字都是相同的。 例如3个试验: 我的桌面:0-0-1,2-1-2,2-0-1 我的手机; 0-0-0,2-2-2,0-0-0;
for (int x = 0; x < 3; x++){
Random randomGenerator = new Random();
int randomNumber = randomGenerator.nextInt(3);
postNumber(randomNumber);//This function I wrote sends the randomNumber to be drawn on the screen
}
答案 0 :(得分:8)
您应该在您的循环外部初始化<{1}}实例 - 或理想情况下,只需一次。 (documentation表示它是线程安全的,因此您不需要每个线程或类似的东西。)
基本上,它根据当前时间播种Random()
的新实例...并且当前时间在循环的迭代之间没有显着变化。这是一个常见的错误,Oracle Java实现在不久前修复了它 - 看起来Android实现还没有。但从根本上说,这是你自己制作的一个问题,而且通过使用Random
的单个实例来生成你的所有数字,这绝对是可以避免的。