请教各位前辈,如何产生7位或者N位不同的随机数啊?举个例子吧,呵呵,不太好解释比如说:随机数1: 2345678    随机数2:1234567  这样就算是合格的随机数        随机数3: 3456789    随机数4:3234567   这样就不算是合格的随机数,因为首位的3相同就是说生成的随机数各个位上的数字也不可以相同csdn牛人多,各位前辈指点小小弟  谢谢:)  

解决方案 »

  1.   

    public class TestDemo12
    {
    static String s ;
    public static void main(String args[]){
    int[] num = new int[7];

    for(int i = 0;i<num.length;i++){
    num[i] = (int)(Math.random()*10);
    if(i == 0)s =String.valueOf(num[i]);
    else s += String.valueOf(num[i]);
    //int t = Integer.parseInt(s);
    }
    int t = Integer.parseInt(s);
    System.out.println(t);
    }
    }
    随便获得几位的数字 如果太长的话就不能用int型了
    可以改数组的长度 来确定获得几位的数字
      

  2.   

        private static final int NUM_LENGTH = 0;    //0<=NUM_LENGTH<=10
        public static void main(String[] a){
            String i[] = {"1","2","3","4","5","6","7","8","9","0"}; 
            List<String> l = new ArrayList<String>();
            l.addAll(Arrays.asList(i));
            Random ran = new Random();
            String s = "";        
            while (l.size() > 10 - NUM_LENGTH)
                s += l.remove(ran.nextInt(l.size()));    
            s = s.replaceAll("^(0)(\\d)", "$2$1");
            System.out.print(s);
        }    
      

  3.   

        private static final int NUM_LENGTH = 7;    //0<=NUM_LENGTH<=10
        public static void main(String[] a){
            String i[] = {"1","2","3","4","5","6","7","8","9","0"}; 
            List<String> l = new ArrayList<String>();
            l.addAll(Arrays.asList(i));
            Random ran = new Random();
            String s = "";        
            while (l.size() > 10 - NUM_LENGTH)
                s += l.remove(ran.nextInt(l.size()));    
            s = s.replaceAll("^(0)(\\d)", "$2$1");
            System.out.print(s);
        }
    发错了,你的情况NUM_LENGTH = 7
      

  4.   

    public static void main(String[] args) {
        int[] arr = new int[7];
        int[] nums = new int[10];
        Random r = new Random();
        for (int i = 0; i < 10; i++)
            nums[i] = i;
        for (int i = 0; i < 7; i++) {
            int j = 0;
            while ((nums[j = r.nextInt(10)]) == 0)
                ;
            arr[i] = nums[j];
            nums[j] = 0;
        }
        System.out.println(Arrays.toString(arr));
    }
      

  5.   

    我认为用LinkedHashSet集合类是最方便,快速;
    static int N=8;//位数
    public static  void main(String...x)
    {
    Set<String> set=new LinkedHashSet<String>();
    while(set.size()<N)
    {
    set.add(""+(int)(Math.random()*10));
    }
    String num="";//转换串
    for(String i:set)
    {
    num+=i;
    }
    long number=Long.parseLong(num);
    System.out.println(number);
    }
      

  6.   

    Set的开销其实很大的……不过这里位数少而且只需生成一次看不出来
      

  7.   

    public class TestDemo12
    {
    static String s1 ;
    static String s2;
    int[] num1 = new int[arrayLong];
    int[] num2 = new int[arrayLong];
    public static int arrayLong = 7;
    public static void main(String args[]){
    new TestDemo12().chooseNum();
    int t1 = Integer.parseInt(s1);
    int t2 = Integer.parseInt(s2);
    System.out.println(t1);
    System.out.println(t2);
    }
    public void chooseNum(){

    for(int i = 0;i<num1.length;i++){
    num1[i] = (int)(Math.random()*10);
    num2[i] = (int)(Math.random()*10);
    if(i == 0)
    {
    s1 =String.valueOf(num1[i]);
    s2 = String.valueOf(num2[i]);
    }
    else
    {
    s1 += String.valueOf(num1[i]);
    s2 += String.valueOf(num2[i]);
    }

    }
    judageNum();

    }
    public void judageNum(){
    if((num1[0] == num2[0])||(num1[arrayLong-1] == num2[arrayLong-1])) {
    chooseNum();
    }
    }
    }
    比较长 不过很好理解  高手可以简化一下 
    这次输出来的是两个数 且首位和末位都不相同