我创建了一个jQuery插件,但是我遇到了问题,我使用以下代码:
Math.floor(Math.random()*500)
我将结果添加到元素中, 但奇怪的是结果每次都是一样的。
如果我在随机数生成后向行添加alert(), 我得到随机值,为什么? 我想没有alert()随机整数。但是如何?
答案 0 :(得分:1)
随机数函数是一个模拟随机的方程,但它仍然是一个函数。如果你给它相同的种子,第一个答案将是相同的。
你可以尝试更改种子,并在首次加载javascript时执行此操作,这样如果随机数生成器有一个时间组件,那么它可以使用加载页面的延迟来更多地随机化数字。
但是,你可能想要改变种子。您可以使用Date()
函数,然后获取毫秒并将其用作种子,这可能有助于首先加扰它。
我认为生成器有一个时间组件是它随着警报而变化的事实,因为在生成下一个数字时会延迟,尽管我没有对此进行测试。
<强>更新强>
我意识到规范声明Math.random没有参数,但是正在使用种子。
我来自C,然后是Java,所以事实上使用参数没有错误导致我认为它使用了它,但现在我发现这是不正确的。
如果你真的需要一颗种子,最好的办法是写一个随机数发生器,然后Knuth书就是最好的起点。
答案 1 :(得分:0)
这就是我根据自己的需求解决的问题。在我的情况下,它工作正常,因为我只是偶尔请求数字,而不是顺序或循环。如果你在循环中使用它,这将无法工作,因为它是基于时间的,循环将执行几毫秒的请求。
<android.support.design.widget.NavigationView
android:id="@+id/navigation"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/nav_header" />
<ListView
android:id="@+id/lst_menu_items"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
</android.support.design.widget.NavigationView>
这将为您提供从0到quantity_of_nums - 1
的数字希望它有所帮助!
答案 2 :(得分:-6)
随机数生成器实际上是伪随机数生成器 - 即它们使用公式来计算实际上随机的数字流。
因此,对于相同的初始输入值(种子),您将获得相同的流。因此,诀窍是使用一个好的实际随机种子为随机数生成器播种。
所以你需要以某种方式将种子传递给random() - 你可以使用当前时间的某种散列,或者你认为具有某种随机性的任何其他数据(如果你希望它是“安全的”随机“ - 这是一个完整的其他主题,可能涵盖在其他地方)。
所以使用类似的东西: Math.random(Date.getMilliseconds()) - 可能更接近你想要的东西。
答案 3 :(得分:-13)
您可以使用
#include <sys/time.h>
然后获得一系列种子,范围从0到999,999,使用
gettimeofday(&tv, NULL);
srand(tv.tv_usec);
然后,要获取0 - 499范围内的随机数,请使用
r = 500*((double)rand() /((double)(RAND_MAX)+(double)(1.0))));
或在此结果中添加1以将其移至范围1 - 500。
祝你好运