Использование длинного числа для генерации 2 уникальных длинных чисел - PullRequest
0 голосов
/ 24 марта 2020

У меня есть приложение, которое использует сгенерированный номер eventNumber для Event Message в качестве идентификатора сообщения для получения Notification Message. eventNumber гарантированно будет уникальным и растущим.

Таким образом, для каждого genNum мы генерируем уведомление.

eventNumber on EventMsg | Notification Msg ID
---------------------------------------------
                23      |   23
                31      |   31
                37      |   37

Мы используем идентификатор сообщения в Notification message, чтобы отследить, какой Event message его создал. Допустим, у нас было сообщение с идентификатором 123. С этим идентификатором 123 мы можем сказать, что сообщение о событии с 123 произвело это сообщение уведомления.

Проблема в том, что могут быть редкие случаи, когда сообщение о событии может потребовать создания 2 сообщений уведомления. , Поскольку каждый Notification Message должен быть уникальным, это проблема.

Допустим, у нас есть событие с идентификатором 456, которое требует от нас создания 2 уведомительных сообщений. Это проблема, потому что мы ожидаем, что каждое уведомление будет иметь уникальный идентификатор. Это означает, что мы не можем использовать 456 в качестве идентификатора сообщения для обоих уведомительных сообщений.

Можно ли по-прежнему использовать идентификатор сообщения о событии 456, чтобы создать уникальные идентификаторы для 2 сообщений уведомления? Эти итоговые идентификаторы все еще должны позволять декодировать тот факт, что они пришли из события с идентификатором 456.

Все идентификаторы / номера типа long.

Пока что мое наивное решение для каждого Идентификатор события, я умножаю на 10 и затем увеличиваю второй. Так что 456 становится 4560. Уведомление 1 будет иметь идентификаторы 4560 и 4561 соответственно. Есть ли лучший способ go по этому поводу? Спасибо, что нашли время, чтобы прочитать этот вопрос

1 Ответ

0 голосов
/ 24 марта 2020

Когда я хочу сделать уникальное число, я использовал этот метод, потому что есть такое небольшое изменение, чтобы быть числом, аналогичным другому сгенерированному;

long number;
public long unique(int number) {

this.number = number * number;
for(int i = 2; i < number; i++) {
if(this.number % i == 0) {
this.number = this.number / i;
break;
} 
}
return this.number;
}

Не работает должным образом с простыми числами, но работает !

Пример первого идентификатора сообщения 8. Этот метод сгенерирует второй идентификатор, и он будет равен 32. Простое декодирование того, что было первым номером сообщения. Это также может работать с BigIntegers, но я никогда не работаю с ними и не знаю, как с ними работать.

Вы можете увеличить число, изменив public long unique(int number) на public BigInteger unique(long number) и long number; на BigInteger number;

Я сделал для вас способ его расшифровки. Знайте, что это работает только иногда!

double Squareroot;
public double find(long number) {
for(long i = 2; i <= number; i++) {
int testing = number * i;
Squareroot = Math.sqrt(test);
if(Squareroot == Math.floor(Squareroot) {
break;
}
}
return Squareroot;
}

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