java生成7个不同的随机数

public static void main(String[] args) {
int[] num = new int[36]; // 声明一个数组接1-36的数字
int[] no = new int[7]; // 接7个随机数
int[] noo = new int[7]; // 接输入数的数
// 往num数组里装1-36个数字
for(int i=1;i<37;i++){
num[i-1]=i;
}
// 生成7个不同的随机数
for(int i=0;i<7;i++){
int random = (int)(Math.random()*(37-i));
no[i]=num[random];
num[random]=num[num.length-1-i];
System.out.print(no[i]+"\t");
}
那不对, 请指教 还有没有别的算法, 用循环做和数组做

int random = (int)(Math.random()*(37-i));
这一句好像有问题
i == 0的时候, 假如Math.random()是0.995 , 很接近1的时候,(int)(Math.random()*37)就是37,
下一句
no[i]=num[random]; //这里会造成数组越界

可以这样改 (前面没有问题)

// 生成7个不同的随机数
for(int i=0;i<7;i++){
int random = (int)(Math.random()*(36-i)); //改成36
no[i]=num[random];
num[random]=num[num.length-1-i];
System.out.print(no[i]+"\t");
}

你的算法目的是不是 随机生成7个不同的数,这些数 大于等于1 , 小于等于36?
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-12-15
import java.util.Arrays;
import java.util.Random;

public class RandomGenerator {
 private Random rand;
 public RandomGenerator() {
  rand = new Random(System.currentTimeMillis());
 }
 public int[]next(){
  int []ret=new int[4];
  for(int i=0;i<ret.length;i++){
   ret[i]=rand.nextInt(10);
  }
  return ret;
 }
 public static void main(String[] args) {
  RandomGenerator generator=new RandomGenerator();
  System.out.println(Arrays.toString(generator.next()));
 }
}

用Random类的nextInt(int n)就可以生成0-n之间(不包括n)的随机数,然后赋给数组就行了

第2个回答  2009-12-13
int random = (int)(Math.random()*(37-i));有问题

有种很简单的写法如下:
int[] numberArray=new int[7];

for(int i=0;i<7;i++){
//产生1到36中的七个随机数
numberArray[i]=(int)(Math.random()*36+1);
System.out.print(numberArray[i]+"\t");
}
第3个回答  2009-12-13
int random = (Math.random()*370).intValue();//这样才能得到整数.它的范围是( 0,36),不包括36 ;
第4个回答  2009-12-13
你这个好像可能会出现相同的数。建议直接生成随机数,加一个判断吧,出现相同的就 继续生成,知道生成7个不同的数。
相似回答