JavaMe: генерация случайных чисел из 14 положительных цифр - PullRequest
1 голос
/ 21 января 2010

Я хочу сгенерировать случайное число только из 14 положительных цифр и использую для этого следующую функцию:

public void random()
{
  Random number = new Random();
  long l = number.nextLong();
  number.setSeed(System.currentTimeMillis());    

  long num = Math.abs(number.nextInt())%999 + (l/100000); // problematic line
  mTextBox.setString("" + num);
}

Я очень новичок в JavaMe, я сделал вышеупомянутую функцию сам, но я считаю, что она не работает, как ожидалось. Он также генерирует -ve числа. Также иногда одна или две цифры отсутствуют в сгенерированном номере, что приводит к 12 или 13 числам, а не 14.

Любые предложения или улучшения кода будут высоко оценены.

Ответы [ 4 ]

2 голосов
/ 21 января 2010

Я не понял, что вы действительно хотите, код подсказывает, что вы хотите 3-значное число (%999).
В противном случае вы можете создать 14-значный номер между 1000000000000000 и 9999999999999999 с помощью

long num = 1000000000000000L + (long)(number.nextDouble() * 8999999999999999.0);


примечание (1 / 100000) - 0 (ноль), поскольку это делается целочисленным делением, используйте (1.0 / 100000.0) для двойного деления

2 голосов
/ 21 января 2010

Если вы хотите 14 цифр, то вы должны использовать 14 вызовов на number.nextInt(10) - что-то вроде этого:

public static String randomDigits(Random random, int length)
{
    char[] digits = new char[length];
    // Make sure the leading digit isn't 0.
    digits[0] = (char)('1' + random.nextInt(9);
    for (int i = 1; i < length; i++)
    {
        digits[i] = (char)('0' + random.nextInt(10));
    }
    return new String(digits);
}

Обратите внимание, что я создал экземпляр Random, который вы передаете, а не создал методом - это упрощает использование одного экземпляра и позволяет избежать дублирования заполнения. Это также более общее назначение, поскольку оно отделяет аспект «использовать строку в пользовательском интерфейсе» от «генерировать случайную строку цифр».

Я не знаю, поддерживается ли Random.nextInt(int) в J2ME - дайте мне знать, если это не так. Использование Math.abs(number.nextInt())%999 - плохая идея с точки зрения случайных распределений.

1 голос
/ 01 ноября 2010

Вы получаете отрицательные числа, потому что Random.nextInt() возвращает любое 32-разрядное целое число, а половина из них отрицательная Если вы хотите получить только положительные числа, вы должны использовать выражение Random.nextInt() & 0x7fffffff или просто Random.nextInt(10) для цифры.

1 голос
/ 21 января 2010
long num = 10000000000000L+(long)(random.nextDouble()*90000000000000.0);

EDIT:

mTextBox.setString(MessageFormat.format("{0,number,00000000000000}",
    new Object[] {new Long(num)}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...