解决方案 »

  1.   

    假如我有一个10个数的数组,1 2 3 4 5 6 7 8 9 10,第一次我取一个10以内的随机数,例如取到的是3,则把3写入result数组,并且将源数组3和10对调一下,则原数组变成了1 2 10 4 5 6 7 8 9 3,接着我取一个9以内的随机数,这样不管取到的是几,我只能取前面9个数中的一个,3是第10个,肯定取不到,接着取8以内的随机数,依次类推,永远都取不到重复的。不知道你又没有明白我的意思。
      

  2.   

    a[index]=a[n-1] (n是a数组的长度100)  楼主看一下这个n是不是变化的,n不变没法去重。楼上说的是一种方法,可以实现你说的效果。
      

  3.   

    代码如下:import java.util.*;
    public class LotteryDrawing{
    public static void main(String[] args){
    // 按照你的例子 原数组长度:10, 彩票数组长度:8
    // [注意1]:此时原数组长度值等于原数组的真正长度
    int 原数组长度值 = 10,k = 8; int[] src = new int[原数组长度值];
    for(int i=0; i<原数组长度值; i++){
    src[i] = i+1; //[注意4]:每个下标对应的数都是唯一的
    } int[] result = new int[k];
    for(int i=0; i<k; i++){
    int index = (int)(Math.random() * 原数组长度值); // [注意3]:看完[注意2]再回看这条语句
    result[i] = src[index];
    src[index] = src[原数组长度值-1];
    原数组长度值--;// [注意2]:此时原数组长度值小于原数组的真正长度
    // 也就是下一次循环时[注意3]的"原数组长度值"已经小于真实长度了
    // 所以[注意3]生成的下标一直在变小,后面的下标取不到因此避免重复
    }
    Arrays.sort(result); //易于查重
    System.out.println(Arrays.toString(result));
    }
    }