首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android題庫App開發:SQLite隨機抽題與答案亂序實戰

     編輯:程式設計疑難解答

需求分析:駕考寶典類App核心功能

開發類似駕考寶典的習題App,核心技術點在於:

  1. 從SQLite高效隨機抽取指定數量題目
  2. 選項順序隨機打亂,防止背答案
  3. 保證題目不重複、覆蓋面均勻

方案一:SQL層面隨機(適合中小數據量)

-- 隨機抽取10道題
SELECT * FROM questions ORDER BY RANDOM() LIMIT 10;

-- 選項亂序:應用層處理更靈活
-- 取出選項陣列後用 Fisher-Yates 洗牌演算法

方案二:應用層隨機(大數據量/高性能場景)

// 1. 先查總數
int total = db.rawQuery("SELECT COUNT(*) FROM questions", null).getInt(0);

// 2. 生成不重複隨機索引集合
Random random = new Random();
Set indices = new HashSet<>();
while (indices.size() < 10) {
    indices.add(random.nextInt(total));
}

// 3. 批量查詢(需配合 OFFSET 或主鍵範圍)
// 建議:主鍵連續時用 WHERE id IN (...) 更高效

答案亂序實現(Kotlin示例)

fun shuffleOptions(options: MutableList): List {
    val shuffled = options.toMutableList()
    for (i in shuffled.size - 1 downTo 1) {
        val j = Random.nextInt(i + 1)
        shuffled[i] = shuffled[j].also { shuffled[j] = shuffled[i] }
    }
    return shuffled
}

進階優化建議

  • 建立subject_id, difficulty複合索引加速篩選
  • 題目表新增last_used時間戳,實現「間隔重複」演算法
  • 預生成每日練習題庫,離線化提升響應速度

參考資源:CSDN相關實現文章

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved