генерация аргументов функции в Java - PullRequest
0 голосов
/ 12 июня 2010

Я очень новичок в 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 ]

1 голос
/ 12 июня 2010

Документирование случайного класса 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 (intn)

"Возвращает псевдослучайное, равномерно распределенное значение типа int между 0 (включительно) и указанным значением (исключая)"

1 голос
/ 12 июня 2010

Ключевым утверждением являются следующие:

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) преобразует 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...