哪位大虾有在java中生成随机9位不能重复的数的算法

解决方案 »

  1.   

    import java.util.HashSet;
    import java.util.Random;
    import java.util.Set;public class Test {
        public static void main(String[] args) {
            Random rand = new Random(System.nanoTime());
            Set<Integer> set = new HashSet<Integer>();
            
            while (set.size() < 9) {
                set.add(rand.nextInt(100));
            }
            
            System.out.println(set);
        }
    }
      

  2.   

    不保证100%不重复啊。
              static long getRandomNumber9(){
    Random random = new Random(System.currentTimeMillis()); 
    Random random1 = null;//new Random(System.currentTimeMillis());
    int i3 = 0;
    long l9 = 0;//random.nextLong() * random.nextLong();

    for(i3 = random.nextInt()/123 * random.nextInt()/345;
    i3 < 7 || i3 >= 183;
    i3 = random.nextInt()/123 * random.nextInt()/345);

    try {
    Thread.sleep(i3);
    } catch (InterruptedException e) {
    }

    random1 = new Random(System.nanoTime());

    for(l9 = random1.nextInt() * random1.nextInt(); 
    l9 < 100000000 || l9 >= 999999999;
    l9 = random1.nextInt() * random1.nextInt());

    return l9;
    }
      

  3.   


    正解,利用set不能添加相同元素的原理
      

  4.   

    int[]iArray=new int[5];
    for(int i=0;i<iArray.length;i++){
    iArray[i]=(int)(Math.random()*10+1);//从1~10里面随即出5个不同的数字,
    for(int j=0;j<i;j++){
    if(iArray[i]==iArray[j]){
    i--;
    break;
    }
    }
    }
      

  5.   

    必须是9位吗,你可以 试试取此时的时间,因为此时的时间绝对是唯一的,再乘以个随机数,规范成9位
    比如:Date mydate=new Date();
     int i=mydate*Math.random();
    再除以一个10000或别的取整,这样重复的几率就很小了。最好再遍历下是否重复
      

  6.   

    洗牌算法假代码int[] data = new int[9];
    for(int i=0; i<data.length; i++){
        data[i] = i;
    }int p, p1;p = 8
    p1 = 8之间的随机数;
    交换 data[p] 和 data[p1];p = 7;
    p1 = 0~7之间的随机数
    交换 data[p] 和 data[p1];p = 6;
    p1 = 0~6 之间的随机数
    交换 data[p] 和 data[p1]......
    p = 1
    p1 = 0~1 之间的随机数
    交换 data[p] 和 data[p1];
      

  7.   

    import java.util.Collections;
    import java.util.ArrayList;
    import java.util.List;public class NumberGenerator {
    private static List<Integer> numbers = new ArrayList<Integer>();
    static {
    for(int i=100000000; i <= 999999999; i++) {
    numbers.add(i);
    }
    Collections.shuffle(numbers);
    }

    public static int getNumber() {
    if(numbers.size() > 0) {
    return numbers.get(numbers.size());
    }
    return -1;
    }

    public static void main(String[] args) {
    System.out.println(getNumber());
    }
    }
      

  8.   


     = = ..我写的你试试把
    public static void main(String args[]) {

    int [] number = new int[9];
    Random random = new Random();
    for(int i = 0;i<number.length;i++){
    number[i] = random.nextInt(9);
    }

    for (int i = 0; i < number.length; i++) {
    for (int j = i+1; j < number.length; j++) {
    if(number[i]==number[j]){
    number[j] = random.nextInt(9);
    i=-1;
                    break;
    }
    }
    }

    for (int i = 0; i < number.length; i++) {
    System.out.println(number[i]);
    }
    }
      

  9.   


    写错了点:应该是remove
    import java.util.Collections;
    import java.util.ArrayList;
    import java.util.List;public class NumberGenerator {
    private static List<Integer> numbers = new ArrayList<Integer>();
    static {
    for(int i=100000000; i <= 999999999; i++) {
    numbers.add(i);
    }
    Collections.shuffle(numbers);
    }

    public static int getNumber() {
    if(numbers.size() > 0) {
    return numbers.remove(numbers.size());
    }
    return -1;
    }

    public static void main(String[] args) {
    System.out.println(getNumber());
    }
    }
      

  10.   

    处理一下呗,小于10000000或大于999999999 pass掉。
      

  11.   

    set是能去重,不过楼主的意思是不是9位数字中每一位数字都不一样
      

  12.   

    package com.zhuwei.number;import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Random;
    import java.util.Set;public class NumberRandom {
    public static void main(String[] args) {
    System.out.println(getRandomNumber());
    }public static String getRandomNumber(){
    Random random=new Random(System.currentTimeMillis());
    Set<Integer> set=new HashSet<Integer>();
    List<Integer> list=new ArrayList<Integer>();
    while(set.size()<9){
    int index=set.size();
    int num=1+random.nextInt(9);
    set.add(num);
    if(index!=set.size()){
    list.add(num);
    }
    }
    StringBuilder str=new StringBuilder();
    for (Integer integer : list) {
    str.append(integer);
    }
    return str.toString();
    }}
      

  13.   

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;public class Test { public static String get9n(){
    List list = new ArrayList();
    for(int i=0;i<10;i++){
    list.add(i);
    }
    Random rand = new Random();
    StringBuffer sb = new StringBuffer();
    for(int i=0;i<9;i++){
    int index = rand.nextInt(10-i);
    sb.append(list.get(index));
    list.remove(index);
    }
    return sb.toString();
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    for(int i=0;i<100;i++){
    System.out.println(get9n());
    } }}
    我的思路是从0-9里面取9个数字,取出1个就把这个已经取出的移除,再从剩下的去取
      

  14.   

        public static void main(String[] args) throws Exception {   
         List<Integer> l = new ArrayList<Integer>();    
         for (int i = 1; i < 10;l.add(new Integer(i++)));
         List<Integer> ll = new ArrayList<Integer>();
         while (l.size() > 0){
         ll.add(l.remove(new Random().nextInt(l.size())));
         }   
         for (int i = 0; i < ll.size();System.out.print(ll.get(i++)));    
        }
      

  15.   


    public class Testrandm {
    public static void main(String args[]) {
            
            int [] number = new int[9];
            Random random = new Random();
            for(int i = 0;i<number.length;i++){
                number[i] = random.nextInt(1000000000);
            }
            
            for (int i = 0; i < number.length; i++) {
                for (int j = i+1; j < number.length; j++) {
                    if(number[i]==number[j]){
                        number[j] = random.nextInt(1000000000);
                        i=-1;
                        break;
                    }
                }
            }
            
            for (int i = 0; i < number.length; i++) {
                System.out.println(number[i]);
            }
        }
    }
      

  16.   

    int[]iArray=new int[9];
    for(int i=0;i<iArray.length;i++){
    iArray[i]=(int)(Math.random()*10+1);
    for(int j=0;j<i;j++){
    if(iArray[i]==iArray[j]){
    i--;
    break;
    }
    }
    }