如题

解决方案 »

  1.   

    建个ArrayList,循环初始化值为1-2000
    然后从0到ArrayList.size()-1之间取一个随机数,然后从ArrayList中删除,重复这行循环
      

  2.   

    public class a2 
    {
    public static void main(String[] args)
    {
    int n;
    n=2000;
    int[] j=new int[50];
    int[] a = new int[n];
    for (int i =0;i<200;i++)a[i]=i+1;
    for(int i=0;i<50;i++)
    { j[i]=a[(int)(Math.random()*n)];
                        a[(int)(Math.random()*n)]=a[n-1];
                        n--;
                       }
    }
    }
      

  3.   

    做法有不少,
    这个是其中一种做法可以用数组调乱顺序int N = 2000;
    int X = 10;
    int[] data = new int[N];
    Random rand = new Random();
    for(int i = 0; i < data.length; i++)
    data[i] = i + 1;//////////////////////////////////
    for(int i = 0; i < X; i++) {
    int index = rand.nextInt(N);
    int tmp = data[index];
    data[index] = data[i];
    data[i] = tmp;
    }
    //////////////////////////////////这样data前X过数字就可以了,而且后面的取数只需要再运行最后一个循环,效率相对比较高。
      

  4.   

    建个ArrayList,循环初始化值为1-2000
    然后从0到ArrayList.size()-1之间取一个随机数,然后从ArrayList中删除,重复这行循环
    这个方法好
      

  5.   

    我这个方法适合经常性需要抽取数字,因为没有ArrayList.remove()操作(remove实际上需要进行大量的数据复制,非常不划算)。
      

  6.   

    import java.lang.Math;double randomValue = Math.random() * 2000;
    int targetValue = Math.round((float)randomValue);targetValue 就是你要的拉
      

  7.   

    洗牌如果要把取好的删除,也应该用LinkedList而不是ArrayList,两者删除方面的性能相信各位应该有所了解
      

  8.   

    public static void main(String[] args) {
            int[] n = new int[2000];
            for (int i=0;i<2000;i++) n[i]=i;
            
            for (int i=0;i<2000;i++){
                int r = (int)(Math.random()*(2000-i))+i;
                int t = n[i];
                n[i]=n[r];
                n[r]=t;
            }
            for (int i=0;i<2000;i++)System.out.println(n[i]);
        }