题目:
有1~100个号码,抽取7个号码获奖。不能抽取重复的号码解题思路:
常规思路:
1.用Math.random()方法抽取一个数来
2.判断这个数是否已被抽取过,若是则重新抽取。书上思路:
用一数组存放100个数
int n = 100;
int[] number = new int[n]
for(int i=0;i<n;i++)
    number[i]=i+1;再用一数组存放结果
int[] result = new int[7];随机抽取7个数将结果号码放到result数组中,并判断重复
for(int i=0;i<7;i++)
{
    index=Math.random()×n;
    result[i]=number[index];
    number[index]=number[--n];//把已经抽到的号码和最后一个数交换,并且在算随机数时不包含最后数的索引值就实现了判断重复
}
-----------------------------
本人刚学习JAVA一星期,有什么地方请各位大侠多指点~

解决方案 »

  1.   

    Math.random()方法产生一个0-1之间的数不包括1所以最后一个数抽不到!
      

  2.   

    额 好象应该是index=1+Math.random()×n;
      

  3.   

    number[index]=number[--n];//把已经抽到的号码和最后一个数交换,并且在算随机数时不包含最后数的索引值就实现了判断重复 
    那只是把最后的数赋给抽到的数吧,貌似他们没有交换
      

  4.   

    如果是我我会这么做.
    用数组存放这100个号码(他们不应该出现重复).
    用length为7的数组存放重奖号码的角标.
    每生成一个角标(1~100), 就判断一下有没有重复.
      

  5.   

    import java.util.*;public class LotteryDrawing {
    public static void main(String args[]) {
    Scanner in = new Scanner(System.in);
    System.out.print("How many numbers doyou need to draw?");
    int k = in.nextInt();
    System.out.print("What is the highest number you can draw");
    int n = in.nextInt();
    int[] numbers = new int[n];
    for (int i = 0; i < numbers.length; i++)
    numbers[i] = i + 1;
    int[] result = new int[k];
    for (int i = 0; i < result.length; i++) {
    int r = (int) (Math.random() * n);
    result[i] = numbers[r];
    numbers[r] = numbers[n - 1];
    n--;
    }
    Arrays.sort(result);
    System.out.println("Bet the following combination.I will male you rich!");
    for (int r : result)
    System.out.println(r); }}
      

  6.   

    index=1+Math.random()×n; 
        result[i]=number[--index]; 
        number[--index]=number[--n];
    这样就行了
      

  7.   

    哈哈,这样一想,发现原来的是对的, index=Math.random()×n; 
    根本就不用抽到100 
      

  8.   

    各位不好意思啊 有个忘写了
       index=(int)Math.random()×n;
    这个要处理一下还有  那个是没交换,只是把末尾的数覆盖掉了抽到的数
      

  9.   

    谢谢JAVA2000了~ 以后有问题小生虚心向你请教
      

  10.   

    恩  学过C  自学过C++JAVA刚开始学
      

  11.   

    这道题在 <THINKING IN JAVA>中也有描述他有一个另外的算法也很不错:开辟一个BOOLEAN数组,数组的下标就是数。  里面的值是TRUE就是被抽到过 FALSE是没被抽到
    每次抽一数,然后到那BOOLEAN数组看是否被到过就可以了觉得这种方法跟简单
      

  12.   

    result [i] = number[index];
    这个不是下标嘛,不是可以取到 number[99] 不就是最后一个数了?这个算法我还是没有明白,如果第一次就取到index=99,那还怎么交换啊