在java中生成函数参数

时间:2010-06-12 02:13:26

标签: java android

我是java的新手,正在开发我的第一个Android应用程序。我使用webview演示作为模板。我试图生成1到12之间的随机整数,然后根据结果调用某个javascript函数。这就是我所拥有的:

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

因此mWebView.loadUrl(nextQuote)mWebView.loadUrl("javascript:wave1()")

相同

我只是想知道我在这里的内容是否正确,并且会按照我认为的方式运作。应用程序没有按预期响应,我怀疑这段代码是罪魁祸首。

2 个答案:

答案 0 :(得分:1)

关键声明如下:

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

第一个陈述给出了你需要的答案,但却是一种相当麻烦的方式。让我们逐步了解发生的事情:

  1. ((12 - 1) + 1)12。 (这是在编译时评估的......)

  2. Math.random()在[{1}}范围内提供double

  3. 0.0D <= rd < 1.0D在[{1}}范围内提供Math.random() * 12

  4. double强制转换将0.0D <= rd < 12.0D转换为(int),向左舍入为零。换句话说,double将是int范围内的整数。

  5. 最后,您添加(int)(Math.random() * 12),其中包含0 <= ri <= 11范围内的整数。

  6. 1: - )

    更简单,更清晰的版本是:

    1 <= ri <= 12

    第二个陈述是(据我所知)一个noop。它隐式地将W**5转换为private static Random rand = new Random(); ... int number = 1 + rand.nextInt(12); ,获取小于或等于int的最大整数的double形式,并将其转换回{{1} }}。结果将始终与原始double相同。

答案 1 :(得分:1)

Java随机类的文档 http://java.sun.com/j2se/1.4.2/docs/api/java/util/Random.html

这是一个很好的方法。

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);

**来自Java doc **方法:public int nextInt(int n)

“返回伪随机,均匀分布的int值介于0(含)和指定值(不包括)之外”