根据给定的数字或字符串生成范围内的唯一编号

时间:2012-12-14 07:45:15

标签: java algorithm random sampling

我想要实现的是这样的事情,假设我们有一千个盒子的列表和一个25种颜色的列表,现在我们想要将颜色分配给盒子,使得颜色来自给定的列表,并且每个时间我问盒子的颜色会选择相同的颜色。多个框可以使用相同的颜色,但无论执行算法的时间长短,同一个框的颜色总是相同。

我想我可以有一个25种颜色的列表和一个算法来根据盒子的名称或ID创建一个唯一的数字(在25的范围内)。

任何人都可以帮助我,算法对我有用吗?

更新 要求略有变化,现在我需要该范围内的五种独特颜色,颜色必须始终相同。假设我们正在以五个为一组排列盒子,每个盒子应该在25种颜色范围内获得独特的颜色。并且算法应该始终为同一组提供相同的颜色。

1 个答案:

答案 0 :(得分:4)

box.getId().hashCode() % 25

会得到0到24之间的数字(含)。

请注意,由于您未在框中指定任何颜色分布规则,因此以下算法也满足您的要求:

return 0;

如果你想要一个好的发行版,那么迭代你的框,并填写Map<String, Integer>,其中键是框ID,值是颜色:

Map<String, Integer> colorsByBoxId = new HashMap<String, Integer>();
int i = 0;
for (Box box : boxes) {
    int colorIndex = i % 25;
    i++;
    colorsByBoxId.put(box.getId(), colorIndex);
}

然后在每次想要获得方框颜色时使用此地图。

或者只是做同样的事情,并在Box类中添加color字段。