random产生的随机数会产生重复,怎么解决  啊 ?

解决方案 »

  1.   

    比如我想输出A-Z中的任意10个数,我不想产生重复怎么办啊?import java.lang.Math.*;
    public class Arrey
    {
      public static void main(String args[])
      {
       int arry[];
       char a[];
       a=new char[10];
       arry=new int[10];
       for(int i=0;i<10;i++)
       {
         arry[i]=(int)(Math.random()*27+97);
         a[i]=(char)arry[i];
         System.out.println(a[i]);
      }}}或则import java.lang.Math.*;
    public class Arrey
    {
      public static void main(String args[])
      {
       char arry[];
       int a[];
       a=new int[10];
       arry=new char[10];
      for(int i=0;i<10;i++)
       { 
      arry[i]=(char)('a'+(Math.random()*26));    
         System.out.print(arry[i]+" ");
         a[i]=(int)arry[i];
      }}}
      

  2.   

    我认为无论是java.lang.Math.random还是java.util.Random都解决不了你说的问题,因为你要的是不重复,而只要是random,则必定有重复的可能。所以,具体不重复的实现应该由你自己去编写函数弄。困了,明天再想这个问题
      

  3.   

    char[] c=new char[]{'A','B',……'Z'};
    int random;
    int len=c.length();
    for(int i=0;i <10;i++){ 
      random=(int)Math.random()*len;
      arry[i]=c[random];
      c[random]=c[len-1]; 
      c[len-1]=arry[i]
      len--; 
    }
      

  4.   

    random=((int)Math.random())*len; 
      

  5.   

    你把备选的A-Z存到一个List里,随机产生list.size的数字,取出以后,清除list里的该备选项,下一次仍然随机产生list.size的数字,取出该随机数字索引的备选项。
      

  6.   

    备注:
    第二次,size已经变小了。如果需要重新从A-Z取,需要重新初始化一个List
      

  7.   

    import java.util.Random;
    -----------------------------------------------
    Random r=new Random(System.currentTimeMillis()); 
      

  8.   

    //下面方法是我测试成功之后的,方法写的很粗,但意思应该好理解//方法一:取出后与已取出的比较,相同,则重新随即public class random {
    public static void main(String[]args){
    int array[];
    char a[];
    array=new int[10];
    a=new char[10];
    for(int i=0;i<10;i++){
    array[i]=(int)(Math.random()*26+97);
    int j=0;
    while(j<i){
    if(array[i]==array[j]){
    array[i]=(int)(Math.random()*26+97);
    j=-1;
    }
    j++;
    }
    a[i]=(char)array[i];
    }
    for(int i=0;i<10;i++){
    System.out.print((a[i])+" ");
    }
    }
    }
    //方法二:取出的字母与数组最后面的字母交换位置,之后统一取出
    public class random{
    public static void main(String[]args){
    System.out.println((char)(97));
    char[]temp=new char[26];
    char[]result=new char[10];
    //给temp字符数组赋初值
    for(int i=0;i<26;i++){
    temp[i]=(char)(97+i);
    }
    for(int i=0;i<10;i++){
    char j;
    int number=(int)(Math.random()*(25-i));
    j=temp[number];
    temp[number]=temp[25-i];
    temp[25-i]=j;
    result[i]=j;
    }
    for(int i=0;i<10;i++){
    System.out.print(result[i]+" ");
    }

    }
    }
      

  9.   


    很简单
                    List<Character> list = new ArrayList<Character>();

    String zimu = "ABCDEFGHIJKLMNOPQRSTUVWSYZ";

    //把26个字符放到一个list中
    for(int i=0;i<zimu.length();i++){
    list.add(new Character(zimu.charAt(i)));
    }

    //打乱
    Collections.shuffle(list);

    //输出10个
    for(int i=0;i<10;i++){
    System.out.println(list.get(i));
    }
    详细参看我的blog
    http://blog.csdn.net/zrzlj/archive/2008/04/03/2248492.aspx呵呵,帮我踩踩