Как сгенерировать число, где цифры на конкретной позиции должны быть из определенного диапазона? - PullRequest
2 голосов
/ 28 апреля 2019

Я хочу написать программу, которая случайным образом генерирует 11-значное число, где первые шесть цифр равны YYMMDD, что представляет год, месяц и день. Например: 931231.

это мой код

long min = 30000000000L;
long max = 99000000000L;
long res=min +(long)(Math.random() * ((max - min) + 1));

Ответы [ 3 ]

2 голосов
/ 28 апреля 2019

Если я правильно понял ваш вопрос, вы пытаетесь сгенерировать число, представляющее случайную дату, если это так, вы можете попробовать следующее:

Random rand = new Random();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
long res = Long.parseLong(dateFormat.format(new Date(rand.nextLong())) + (long) (Math.random() * 100000));
1 голос
/ 28 апреля 2019

Две части к нему:

  1. Создание первых шести символов с использованием случайного формата времени и даты: случайное значение между эпохой и текущим временем, извлечение локальной даты и форматирование в строку.

  2. Генерация последних пяти случайных цифр

  public String getRandom() {
    Long randomEpochTime = ThreadLocalRandom.current()
        .nextLong(Instant.now().toEpochMilli());

    String firstSix = Instant
        .ofEpochMilli(randomEpochTime)
        .atZone(ZoneId.systemDefault())
        .toLocalDate()
        .format(DateTimeFormatter.ofPattern("yyMdd"));

    String lastFive = String.valueOf(ThreadLocalRandom.current().nextInt(100000));

    return firstSix.concat(lastFive);
  }
0 голосов
/ 28 апреля 2019

Чтобы сгенерировать часть даты, начните с объявления int number = 0

Сначала сгенерируйте год, добавьте его к числу и умножьте на 100

Затем сгенерируйте месяц, добавьте его к числу и умножьте на 100

.

Используя месяц в качестве значения, выберите соответствующее количество дней для данного месяца и вернуть значение и добавить его к числу.

Пример.

int number = 0;
number += 93*100; //number = 9300
number += 12*100; //number = 931200
number += 31; number = 931231;

Аналогичный подход можно использовать для обозначения остальных 5 цифр. Или сделайте следующее:

int othernumber = 321;
String v = String.format("%d%05d", number, othernumber);
long longv = Long.parseLong(v);
System.out.println(longv);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...