2014-01-05 42 views
0
public class Music extends Activity { 
    private int [] layouts = { 
      R.layout.question_selector, 
      R.layout.question_selector2, 
      R.layout.question_selector3, 
      R.layout.queston_selector4, 
      R.layout.question_selector5, 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     int i = layouts.length; 
     Random r = new Random(); 

     while (--i > 0) { 
      int j = r.nextInt(i + 1); 

      //swap values 
      int temp = layouts[j]; 
      layouts[j] = layouts[i]; 
      layouts[i] = temp; 

     } 
     setContentView(layouts[i]); 
    } 
} 

以下是我迄今爲止所做的工作:它工作得很好,但我注意到有時候一些佈局會一遍又一遍地顯示出來。我想要的是,當我按下按鈕並隨機生成佈局時,下次再次按下按鈕時,它不應該重複之前顯示的佈局。我怎麼能做這樣的事情?如何生成不重複的隨機佈局

回答

1

您可以創建一個arrayList,然後shuffle它,而不是用隨機的數組,這將使其隨機的,但只使用每個項目一次

編輯,代碼示例:

 ArrayList<int> mArrayList = new ArrayList<int>; 
     //OR ArrayList<int> mArrayList = new ArrayList<int>(Arrays.asList(mOrdinaryArray)); 
    mArrayList.put(R.blabla.blabla); 
    mArrayList.put(R.blabla.blablatwo); 
    Collections.shuffle(mArrayList); 
    Log.d(TAG, "output after shuffle: " + mArrayList); 
+0

這意味着我應該聲明它是一個arrayList而不是一個數組?然後我應該隨機化arrayList? – user3149781

+0

是的,所以,而不是陣列,使陣列列表,然後你調用'Collections.shuffle(mArrayList)',然後你可以通過它從位置0到結束,因爲它已經隨機 –

+0

我試圖使它在arrayList,但是當我按下按鈕我得到一個錯誤「逼近」。是否有可能在arrayList中顯示佈局? – user3149781