我是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()")
我只是想知道我在这里的内容是否正确,并且会按照我认为的方式运作。应用程序没有按预期响应,我怀疑这段代码是罪魁祸首。
答案 0 :(得分:1)
关键声明如下:
int number = 1 + (int)(Math.random() * ((12 - 1) + 1));
number = (int) Math.floor(number);
第一个陈述给出了你需要的答案,但却是一种相当麻烦的方式。让我们逐步了解发生的事情:
((12 - 1) + 1)
是12
。 (这是在编译时评估的......)
Math.random()
在[{1}}范围内提供double
。
0.0D <= rd < 1.0D
在[{1}}范围内提供Math.random() * 12
。
double
强制转换将0.0D <= rd < 12.0D
转换为(int)
,向左舍入为零。换句话说,double
将是int
范围内的整数。
最后,您添加(int)(Math.random() * 12)
,其中包含0 <= ri <= 11
范围内的整数。
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(含)和指定值(不包括)之外”