2013-09-25 59 views
0

我正在爲Android構建測驗應用程序。一旦完成,該應用程序有大約500個問題,存在於多個類別中。Android測驗應用程序 - 使問題隨機和動態

我可以讓問題正常工作,但僅在一個實例中:問題是線性的,這意味着它們總是以相同的順序出現,並且問題總是以相同的順序具有相同的答案(例如,問題1總是有答案A,B和C,問題2總是有答案D,E,F等)我知道這個原因,因爲我只是交換textviews,基本上,但僅僅因爲我沒有知道如何去做我想做的事情。

  1. 我希望每個集合中的問題以隨機順序進行,無需重複。在之前的項目中,爲了完成類似的事情,我創建了一個整數,它會生成一個隨機值,然後檢查是否已經使用了該值。然而,這將是令人難以置信的記憶效率低下,因爲我正在開發Android應用程序而不是PC應用程序,這太重要了,不能忽視。
  2. 我希望每個問題都有隨機答案,而不是正確答案,從可能的答案池中選擇。所以,舉個例子,如果我問一些像「1810-1820年誰是英國統治者」(對答案沒有真正的想法),我想要一個答案是正確的,另外兩個或三個被採納來自10個歐洲統治者的池塘。另外,我希望正確答案的位置是動態的,所以它不總是在同一個地方(所以人們不只是記住問題,而是答案的位置)。

截至目前,由於我仍處於alpha階段前階段,因此問題僅存在於一個java文件中,但是我計劃一旦找到項目的框架就將其移動到SQLite數據庫中。

回答

0

我的建議是你應該隨機測試數組的秩序與一個整數數組,其中包含數字從0到499.所有問題將顯示,但不是以相同的順序。要做到這一點,看到這個職位:Random shuffling of an array

第二種情況下,如果我在你的位置,我會做一個數組的答案,隨機答案,並從索引0到3的隨機數正確的答案,

answer[random]=correctAnswer; 

問候

+0

把答案放入一個數組,然後洗牌是一個很好的想法,我沒有考慮過,謝謝。但是,另一個潛在的問題是,對於一些問題,我將使用圖像而不是文本。糾正我,如果我錯了,但如果我使用SQLite數據庫來拉正確和不正確的答案,在數據庫中,我只是把一個URI的圖像,而不是一個文本字符串,正確的? – Kezlyr

+0

我的意思是洗牌問題數組或索引0-499數組。 (不是答案),然後隨機選擇10個答案中的4個,並用正確答案替換其中的一個。你也可以洗牌,並從0-3取得。是的,你可以把圖像或圖像ID的uri。我希望你能完成你的項目;) –

0

1)的

寫下從1到N 問題選擇一個和unstruck號的剩餘數量之間的隨機數k(含)。 從低端開始計算,清除尚未排除的第k個問題,並在其他地方寫下來。 從第2步開始重複,直到所有數字都被刪除。 在步驟3中寫下的問題序列現在是原始數字的隨機排列。

這不過是..菲捨爾耶茨洗牌,你可以看看它在 http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

0

請看下面的代碼

//Take a list to store the index of already asked questions 
HashSet<Integer> alreadyAskedQuestions = new HashSet<Integer>(); 

Random random = new Random(); 

//change the number according to your need 
int maxQuestionCount = 500; 

//Continue untill all the questions are completed 
while (alreadyAskedQuestions.size() < maxQuestionCount) { 

    // Get a question that is not already asked 
    int currentQuestionIndex = random.nextInt(maxQuestionCount); 
    while (alreadyAskedQuestions.contains(currentQuestionIndex)) { 
     currentQuestionIndex = random.nextInt(maxQuestionCount); 
    } 

    // do something with current question 

    // Put the answers into a list 
    ArrayList<String> answers = new ArrayList<String>(); 
    answers.add("right answer"); 
    answers.add("wrong answer 1"); 
    answers.add("wrong answer 2"); 
    answers.add("wrong answer 3"); 

    //Shuffle the answers 
    Collections.shuffle(answers); 

    // do something with the answers 

    // put the current question in the already asked list 
    alreadyAskedQuestions.add(currentQuestionIndex); 
} 
0

如果我理解你的問題吧,你真正需要的有效方式隨機化問題所在的索引....

爲此,它會給你隨機數有效

使用該號碼作爲索引你的存儲問題,並告訴他們

int t=(int)System.currentTimeMillis(); 
int index=t%500; 

Access your question 

Questions[index] 

這將隨機順序總是給一個問題..

希望它可以幫助你。

相關問題