2010-10-03 7 views
2

J'ai essayé de créer une méthode aléatoire qui interrogerait la base de données, obtenir le nombre de lignes dans la base de données, puis saisir un nombre aléatoire entre 1 et le nombre total de lignes pour récupérer un élément spécifique dans la base de données . Cela fonctionne bien, mais pas génial, s'il y a moins de dix entrées dans la base de données, il répétera la même entrée environ quatre fois sur dix. Je pense que j'ai besoin d'une avance sur une meilleure méthode.problème de nombre aléatoire android

number = mDbHelper.getCount(mDbHelper.mDb); 
Random generator = new Random(); 
n = generator.nextInt((int) number); 
if(n <= 1){ 
    n = 1; 
} 

Des idées?

Répondre

4

D'après votre description, votre requête de base de données est basée 1's. Java nextInt est basée 0's, qui est, .nextInt(10) va générer un nombre aléatoire entre 0 et 9. Ainsi, votre bonne solution est de changer la ligne 3 à

n = generator.nextInt((int) number) + 1; 

cela vous donnera ce dont vous avez besoin. Parce que vous convertissez actuellement [0] et [1] en 1 dans les lignes 4 & 5, vous fausser votre distribution de probabilité. Votre première entrée va être comptée deux fois. Si vous avez une moyenne de 5 entrées dans votre database, cela vous donnera le taux de succès 2/5 = 40% que vous voyez.

2

D'abord, je voudrais essayer de déplacer la ligne:

Random generator = new Random(); 

au constructeur de votre classe ou un autre endroit où il ne se crée qu'une seule fois. Cela devrait certainement aider.

Autre que cela, les réponses à cette question pourraient vous aider: How good is java.util.Random?

+0

J'ai la fonction aléatoire dans le constructeur de classe. Je regarde la réponse que vous publiez, il y a beaucoup d'informations là-dedans. – Will