Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从整数数组创建随机整数_Java_Random - Fatal编程技术网

Java 从整数数组创建随机整数

Java 从整数数组创建随机整数,java,random,Java,Random,可以从整数数组生成伪随机整数吗?我的意思不是从数组中选取一个随机整数,而是做如下操作 [1,2,3]=4542 [56,89,42]=80421 最后,是否有可能使输出完全随机,而不是逐渐变化?我不想这样 谢谢你的意见 编辑:我尝试在下面的代码中使用hashcode。(我不只是使用random的原因是我需要能够访问随机输出,有时不需要循环) 对于第二部分,我得到了递增1的数字 29791 29792 29793 29794 29795 ... 您可以散列输入数组,并使用单个散列值为Random

可以从整数数组生成伪随机整数吗?我的意思不是从数组中选取一个随机整数,而是做如下操作

[1,2,3]=4542

[56,89,42]=80421

最后,是否有可能使输出完全随机,而不是逐渐变化?我不想这样

谢谢你的意见

编辑:我尝试在下面的代码中使用hashcode。(我不只是使用random的原因是我需要能够访问随机输出,有时不需要循环)

对于第二部分,我得到了递增1的数字

29791
29792
29793
29794
29795
...

您可以散列输入数组,并使用单个散列值为
Random
的实例播种。这是来自布洛赫的:

int myHash(int[] seedAry) {
  int result = 17;
  for (int s : seedAry) {
    result = 31 * result + s;
  }
  return result;
}
使用返回的散列值为
Random
的实例设定种子

Random ng = new Random();
for(int i: seedArray){
    outint = ng.setSeed(i).nextInt();
}

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

您的意思是将数组用作随机数生成器的种子吗?您是否希望函数具有确定性(与给定的输入一样,它始终必须产生相同的输出)。?你介意有人计算出函数,而其他人能够重新创建函数吗?如果你想要确定性而不安全的函数,你可以创建一个,就像我们重写
hashCode()
方法一样。比方说,将每个元素乘以一个素数(比如37),然后将它们相加。@redflar3但这并不是完全随机的。我不确定是什么行动wants@addy2012是的,exactlyOP希望相同的输入有相同的输出是的,但是如果我每次都要创建一个新的随机对象,或者如果我在一个现有的随机对象上设置每个操作的种子,这并不是特别快。我已经决定这足够快了。谢谢
int myHash(int[] seedAry) {
  int result = 17;
  for (int s : seedAry) {
    result = 31 * result + s;
  }
  return result;
}
Random ng = new Random();
for(int i: seedArray){
    outint = ng.setSeed(i).nextInt();
}