【问题标题】:android random number problemandroid随机数问题
【发布时间】:2010-10-03 01:53:10
【问题描述】:

试图创建一个随机方法来查询数据库,获取数据库中的行数,然后抓取一个介于 1 和总行数之间的随机数,以获取数据库中的特定项目。它工作正常,但不是很好,如果数据库中的条目少于十个,它将重复相同的条目大约十分之四。我想我需要一个更好的方法。

 number = mDbHelper.getCount(mDbHelper.mDb);
 Random generator = new Random(); 
 n = generator.nextInt((int) number);
 if(n <= 1){
   n = 1;
 }

有什么想法吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    根据您的描述,您的数据库查询是基于 1 的。 Java nextInt 是从 0 开始的,也就是说,.nextInt(10) 会生成一个介于 0 和 9 之间的随机数。因此,您正确的解决方案是将第 3 行更改为

    n = generator.nextInt((int) number) + 1;
    

    这将为您提供所需的内容。

    因为目前您在第 4 行和第 5 行中将 [0] 和 [1] 都转换为 1,因此您正在扭曲概率分布。您的第一个条目将被计算两次。如果您的 database 中平均有 5 个条目,这将为您提供您所看到的 2/5 = 40% 命中率。

    【讨论】:

      【解决方案2】:

      首先,我会尝试移动线路:

      Random generator = new Random();
      

      到您的类的构造函数或其他只会创建一次的地方。这肯定会有所帮助。

      除此之外,这个问题的答案可能会对您有所帮助: How good is java.util.Random?

      【讨论】:

      • 我在类构造函数中有随机函数。我正在查看您发布的答案,那里有很多信息。
      猜你喜欢
      • 1970-01-01
      • 2011-08-02
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      相关资源
      最近更新 更多