2010-06-12 59 views
0

我對java很陌生,正在開發我的第一個Android應用程序。我使用webview演示作爲模板。我試圖生成一個1到12之間的隨機整數,然後根據結果調用某個javascript函數。下面是我有:在java中生成函數參數

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()")

我只是想知道,如果我在這裏是正確的,並會工作,我想它會的方式。應用程序沒有按預期做出響應,我懷疑這一點代碼是罪魁禍首。

回答

1

的關鍵語句如下:

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

第一條語句給了你所需要的答案,但在一個相當麻煩的方式。讓我們通過會發生什麼步:

  1. ((12 - 1) + 1)12。 (這是在編譯時評估的...)

  2. Math.random()給出double的範圍0.0D <= rd < 1.0D

  3. Math.random() * 12給出double的範圍0.0D <= rd < 12.0D

  4. (int) cast將double轉換爲int,方法是將其舍入爲零。換句話說,(int)(Math.random() * 12)將是0 <= ri <= 11範圍內的整數。

  5. 最後,您添加1,給出範圍爲1 <= ri <= 12的整數。

W**5 :-)

一種更簡單,更清晰的版本是:

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

第二條語句是(據我可以告訴)一個空操作。它隱含地將int轉換爲double,獲得小於或等於double的最大整數的double形式,並將其轉換回int。結果將始終與原始int相同。

1

的Java機制的文檔Random類 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文檔**方法:公衆詮釋nextInt(INT N)

「則返回0之間(含)的僞隨機均勻分佈的int值和指定的值(不包括)」