从整数数组创建随机整数

时间:2015-09-23 16:07:07

标签: java random

是否可以从整数数组生成伪随机整数?我并不是指从数组中选择一个随机整数,而是做类似

的操作

[1,2,3] = 4542

[56,89,42] = 80421

最后,是否有可能让输出完全随机,而不是逐渐改变?例如。我希望this不是this

感谢您的任何意见。

编辑:我已尝试在以下代码中使用哈希码。 (我不仅仅使用随机的原因是我需要能够访问随机输出而无需循环)

Random random = new Random();
int size = 10;
for (int x = 0; x < size; x++) {
  for (int y = 0; y < size; y++) {
    for (int z = 0; z < size; z++) {
      System.out.println(random.nextInt());
    }
  }
}
System.out.println();
for (int x = 0; x < size; x++) {
  for (int y = 0; y < size; y++) {
    for (int z = 0; z < size; z++) {
      System.out.println(Arrays.hashCode(new int[]{x, y, z}));
    }
  }
}

对于代码的第一部分,我得到随机数,例如

-733673840
2005335778 
-954776008
-695687646
-1339170035
...

对于第二部分,我得到的数字增加一个

29791
29792
29793
29794
29795
...

2 个答案:

答案 0 :(得分:0)

您可以对输入数组进行哈希处理,并使用单个哈希值为Random的实例设定种子。这取自Bloch:

int myHash(int[] seedAry) {
  int result = 17;
  for (int s : seedAry) {
    result = 31 * result + s;
  }
  return result;
}

使用返回的哈希值为Random

的实例设定种子

答案 1 :(得分:0)

select  m.*
from    Master  m
left join Trans   t
    on  t.MasterID  = m.ID
    and t.EffDate >= date '2015-09-01'
    and t.EffDate < date '2015-10-01'
where   t.MasterID is null;

除非更改了随机数生成器,否则它将始终提供相同的输出整数集。