2012-10-29 39 views
0

我有一個程序有一個字符串String options[4]的數組,它包含四個問題的選項。一個答案是正確的。我的程序邏輯,該程序將正確答案爲options[0],並隨機從數據庫中選擇的任何其他三個名字,並在options[1][2][3]把它們。Jumbling數組元素

我試圖改變放置地點在陣列本身的邏輯,但畢竟是我的複雜程序,所以選擇不這麼做。我也嘗試使用隨機函數來交換兩個位置,但是因爲我在android java中編寫了這個代碼,所以它佔用了太多時間,並且默認情況下,如果隨機函數花費太多時間,android os將停止響應。所以儘可能,我不想使用隨機函數。有沒有其他的邏輯或現成的函數可用於混亂數組? 我需要隨機攪亂如下所述陣列中的四個選項的代碼:

String options[] = new String[4]; 
options[0]="Correct Answer"; 
options[1]="Wrong Answer 1"; 
options[2]="Wrong Answer 2"; 
options[3]="Wrong Answer 3"; 
//here i want the code to jumble 

請提供代碼.. 由於一噸。

+0

這是什麼C#,Java的? – yogi

+0

其Java只... – Gaurav

回答

-1

EDIT:作爲評價所提到的,忽略此溶液,並使用上面提供的解決方案。

既然你已經定義optionsString options[],我假設你在Java編碼。因此,這裏是Java中的混亂代碼:

String options[] = new String[4]; 
    options[0]="Correct Answer"; 
    options[1]="Wrong Answer 1"; 
    options[2]="Wrong Answer 2"; 
    options[3]="Wrong Answer 3"; 

    final int jumbleTries = 100; 
    Random rand = new Random(); 

    for(int i = 0; i < jumbleTries; i++) 
    { 

     int index1 = rand.nextInt(options.length); 
     int index2 = rand.nextInt(options.length); 

     if (index1 == index2) 
      continue; 

     String temp = options[index1]; 
     options[index1] = options[index2]; 
     options[index2] = temp; 
    } 
+0

嘿非常感謝...但我已經嘗試過這一點,但它需要很多時間,因爲我在Android版本中編寫了這個java。如果如果花費太多時間,那麼android操作系統將認爲該應用程序沒有響應並且發生錯誤。有沒有內置的隨機函數?我的意思是,我看到一個「collection.jumble()」,但dint完全理解它。所以你能給我任何更快的解決方案嗎?儘可能避免隨機函數... – Gaurav

+0

這是一個非常糟糕的混洗算法。查閱「Fisher Yates」。 – Alnitak

+0

這種方法的計算成本非常昂貴,只是使用java.util.Collections shuffle方法進行演示。 – Quetzalcoatl

3

很簡單:

Collections.shuffle(Arrays.asList(yourArray)); 

Arrays.asList()提供由所提供的數組支持的List,所以當List被打亂,因此是底層(原創)陣列。

請參見:

+0

這是最有用的解決方案... thanx噸ton ..... – Gaurav

0

您可以使用Fisher-Yates shuffle

Random r = new Random(); 
for(int i = options.length - 1; i > 0; i--){ 
    int rand = r.nextInt(i); 
    String temp = options[i]; 
    options[i] = options[rand]; 
    options[rand] = temp; 
}