首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用一个长数生成2个唯一的长数

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

Stack Overflow用户
提问于 2020-03-24 23:37:16
回答 1查看 57关注 0票数 0

我有一个应用程序,它使用Event Message上生成的数字eventNumber作为消息id来生成Notification MessageeventNumber肯定是独一无二的,而且还在不断增加。

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

代码语言:javascript
运行
复制
eventNumber on EventMsg | Notification Msg ID
---------------------------------------------
                23      |   23
                31      |   31
                37      |   37

我们在Notification message中使用消息id来跟踪哪个Event message生成了它。因此,假设我们收到一条ID为123的通知消息。有了这个ID 123,我们就可以说带有123的事件消息生成了那个通知消息。

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

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

有没有办法仍然使用事件消息ID 456,为2条通知消息生成唯一的ID?这个结果ID应该仍然可以解码它来自ID为456的事件的事实。

所有id/类型为long的编号。

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

EN

回答 1

Stack Overflow用户

发布于 2020-03-24 23:55:36

当我想要生成一个唯一的数字时,我使用这种方法,因为有很小的变化,使数字与其他生成的数字相同;

代码语言:javascript
运行
复制
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;
}

不能正确地处理质数,但是可以工作!

示例第一条消息id为8。此方法将生成第二个id,它将为32。解码第一个消息编号很简单。这也适用于BigIntegers,但我从来没有使用过它们,也不知道如何使用它们。

您可以通过将public long unique(int number)更改为public BigInteger unique(long number)并将long number;更改为BigInteger number;来使该数字更长

我为你设计了一个方法来解码它。请注意,它只会在某些时候起作用!

代码语言:javascript
运行
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60834307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档