2012-10-19 40 views
2

全部 我想合乎邏輯的幫助。我有100行數據庫,並獲得所有行隨機盟友沒有重複我已經使用下面的代碼。獲得隨機沒有範圍之間沒有重複

public ArrayList<Rows> getRows(){ 
    ArrayList<Rows> myRaw=new ArrayList<Rows>(); 
    Cursor rawCursor=this.db.query(DB_TABLE, null, null, null, null, null, null); 
    if(rawCursor.getCount()>0){ 
     Random rng = new Random(); 
     rawCursor.moveToFirst(); 
     do { 

      // Ideally just create one instance globally 
      ArrayList<Rows> generated = new ArrayList<Raws>(); 
      for (int i = 0; i < 371; i++) 
      { 
       while(true) 
       { 
        Integer next = rng.nextInt(371) + 1; 
        rawCursor.moveToPosition(next); 
        Rows raw=new Raws(rawCursor.getInt(rawCursor.getColumnIndex("_id")),rawCursor.getString(rawCursor.getColumnIndex("raw")),rawCursor.getInt(rawCursor.getColumnIndex("fav"))); 
        if (!generated.contains(raw)) 
        { 
         // Done for this iteration 
         generated.add(raw); 
         break; 
        } 
       } 
      } 

      myRaw=generated; 

     } while (rawCursor.moveToNext()); 
     rawCursor.close(); 
    } 
    return myRaw; 
} 

感謝所有

+0

你的問題是什麼?即你寫的代碼有什麼問題? – dan1111

+2

任何不使用'ORDER BY RANDOM()'的理由? –

+1

@RenatoLochetti:好的我會但是當我提問時,我沒有得到正確的答案,我怎麼能接受它,因爲其他開發人員可能會跟着它。 –

回答

3

您可以告訴數據庫被一些random number訂購的記錄:

cursor = db.query(DB_TABLE, null, null, null, null, null, "random()"); 
+0

非常感謝@CL –

1

什麼類別洗牌? http://developer.android.com/reference/java/util/Collections.html#shuffle(java.util.List)

public ArrayList<Rows> getRows() { 
    ArrayList<Rows> myRaw = new ArrayList<Rows>(); 
    Cursor rawCursor = this.db.query(DB_TABLE, null, null, null, null, null, null); 

    if (rawCursor.getCount() > 0) { 
     // get all the rows 
     rawCursor.moveToFirst(); 
     do { 
      Rows raw = new Raws(rawCursor.getInt(rawCursor.getColumnIndex("_id")), rawCursor.getString(rawCursor.getColumnIndex("raw")), rawCursor.getInt(rawCursor.getColumnIndex("fav"))); 
      myRaw.add(raw); 
     } while (rawCursor.moveToNext()); 
     rawCursor.close(); 
    } 
    // shuffle the rows in some kind of random order 
    Collections.shuffle(myRaw); 
    return myRaw; 
} 

由@CL提供的答案。可能是更好的選擇,但主要區別在於shuffle方法有一個選項可以提供您自己的Random對象,這意味着您可以隨機使用seed

//Random with seed; 
Random r = new Random(68498493); 
Collections.shuffle(myRaw, r);