每天从游泳池中获取独特的随机单词

时间:2013-08-16 05:37:59

标签: android

我想要每天随机显示一些单词(现在大约200个)而不重复。

在共享首选项中,我存储最后显示的单词的日期,如果今天的日期相同,我显示上次显示的相同单词,今天是另一天我需要从池中获取另一个随机单词并显示它

我试图通过两种方法实现这一目标:

方法1:使用sqlite db

  • 预填充资产文件夹中的数据库(db有一个包含两列,单词和isUsed的表)
  • on onCreate(SQLiteDatabase数据库)将预填充的数据库复制到/ data
  • 使用sqlite从db获取随机条目并将其isUsed couter更新为true
  • 在共享偏好中删除此单词,以便用户在同一天再次打开该应用,然后显示此单词
  • 如果我要更新db中的单词(150):
    • 使用新单词
    • 在assets文件夹中创建另一个数据库
    • onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)将此db复制到/ data
    • 逐行复制原始数据库中的每个单词,保持isUsed列的完整性

我可以在oncreate中使用SQL语句插入200个单词,然后在onUpgrade中使用sql语句更新其他150个单词,而不是使用预先填充的数据库。

方法2:使用共享偏好

  • 用于保存200字
  • 创建一个随机数最多为200的字符串,并将其保存为共享首选项
  • 每天弹出一个随机数,并显示该索引的单词。如果是同一天,则不要弹出,但显示最后一个单词
  • 如果我要更新单词(150):
    • 检查单词数量增加多少并以随机顺序生成这些增加的数字并将其重新排列回原始随机字符串数组

所以我的问题是我觉得这个算法都不够好。有没有更好的方法来实现这一点,如果不是,我应该采用方法1,方法1,但没有预填充数据库或方法2?

2 个答案:

答案 0 :(得分:1)

为什么不在assets / onCreate期间从onUpgrade中的简单文本文件加载字符串,将它们随机播放并插入数据库?然后,当您需要知道要显示哪个单词时,只需计算应用程序安装的天数(N)并显示第N个单词。

答案 1 :(得分:0)

我觉得方法1 WITH 预填表是最好的选择。这将有助于您提高可扩展性和随机性。

应该避免onCreate中的任何重大任务,因为它会滞后于你的应用程序。如果您需要稍后增加单词数,SQLLite数据库将会很有用。

kriomant建议的方法很好,但是滞后于随机性的自由。我们可以在两个完整周期后预测文本,如果一个人坐下来并尝试它: - )