使用长整数生成2个唯一的长整数

问题描述 投票:0回答:1

我有一个在eventNumber上使用生成的数字Event Message作为消息ID生成Notification Message的应用程序。保证eventNumber是唯一的并且在增加。

因此,对于每个genNum,我们都会生成一条通知消息。

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

我们使用Notification message中的消息ID来跟踪哪个Event message产生了它。假设我们有一个ID为123的通知消息。使用该ID 123,我们可以说带有123的事件消息产生了该通知消息。

问题是,在少数情况下,事件消息可能需要生成2条通知消息。由于每个Notification Message必须是唯一的,所以这是一个问题。

假设我们有一个ID为456的事件,该事件要求我们产生2条通知消息。这是一个问题,因为我们希望每个通知消息都具有唯一的ID。这意味着我们不能将456作为两条通知消息的消息ID。

是否仍可以使用事件消息ID 456为2条通知消息生成唯一的ID?此生成的ID仍应可以解码来自ID为456的事件的事实。

所有ID /类型为long的数字。

到目前为止,我的幼稚解决方案是针对每个事件ID,我乘以10,然后递增第二个。所以456变为4560。通知消息1将分别具有ID 45604561。有没有更好的方法来解决这个问题?感谢您抽出宝贵时间阅读此问题

java bit-manipulation unique long-integer
1个回答
0
投票

[当我想创建一个唯一的数字时,我使用了此方法,因为变化很小,与其他生成的数字相同;

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;
}

无法正确使用质数,但可以使用!

示例第一个消息ID8。此方法将生成第二个ID,其值为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;
}

© www.soinside.com 2019 - 2024. All rights reserved.