2010-06-12 4 views
0

Je suis très nouveau à Java et je travaille sur ma première application Android. J'utilise la démo webview comme modèle. J'essaie de générer un entier aléatoire entre 1 et 12, puis d'appeler une certaine fonction javascript en fonction du résultat. Voici ce que j'ai:générer des arguments de fonction dans Java

int number = 1 + (int)(Math.random() * ((12 - 1) + 1)); 
number = (int) Math.floor(number); 
String nextQuote = "javascript:wave" + number + "()"; 
mWebView.loadUrl(nextQuote); 

Alors mWebView.loadUrl(nextQuote) sera le même que quelque chose comme mWebView.loadUrl("javascript:wave1()")

Je veux juste savoir si ce que j'ai ici est correct et fonctionnera de la façon dont je pense que ça va. L'application ne répond pas comme prévu et je soupçonne que ce bit de code est le coupable.

Répondre

1

La déclaration clé sont les suivantes:

int number = 1 + (int)(Math.random() * ((12 - 1) + 1)); 
number = (int) Math.floor(number); 

La première déclaration donne la réponse dont vous avez besoin, mais d'une manière assez lourde. Permet de pas à travers ce qui se passe:

  1. ((12 - 1) + 1) est 12. (Ceci est évalué au moment de la compilation ...)

  2. Math.random() donne un double dans la plage 0.0D <= rd < 1.0D.

  3. Math.random() * 12 donne un double dans la plage 0.0D <= rd < 12.0D.

  4. La conversion (int) convertit double en int en arrondissant vers zéro. En d'autres termes (int)(Math.random() * 12) sera un entier dans la plage 0 <= ri <= 11.

  5. Enfin, vous ajoutez 1 en donnant un nombre entier compris entre 1 <= ri <= 12.

W**5 :-)

Une version plus simple et plus claire serait:

private static Random rand = new Random(); 
... 
int number = 1 + rand.nextInt(12); 

La deuxième déclaration est (pour autant que je peux dire) un noop. Il convertit implicitement un int en double, obtient la forme double de l'entier le plus grand qui est inférieur ou égal à double, et le convertit en int. Le résultat sera toujours identique à l'original int.

1

documention de Java aléatoire classe http://java.sun.com/j2se/1.4.2/docs/api/java/util/Random.html

Une bonne façon de le faire.

Random rand = new Random();    // does not have to be static but can be. 
int number = rand.nextInt(12) + 1;  // 1 to 12 Must use 12 
              // Range is 0-11 add 1: 1-12 
String nextQuote = "javascript:wave" + number + "()"; 
mWebView.loadUrl(nextQuote); 

** de Java doc ** Méthode: public int nextInt (int n)

"Renvoie une pseudo-aléatoire, la valeur int uniformément répartie entre 0 (inclus) et la valeur spécifiée (exclusive)"

Questions connexes