如何优化这段彩票小程序,实现想要的功能!!

gdstcs 发布于 2011/08/13 22:24
阅读 294
收藏 0
自己编的22选5的 java程序,主要实现目的是生成30组彩票号,利用循环生成。
但要求每次循环的RANDOM种子是Z(随循环变化,也就是自己控制种子数),

但生成出来每组数字都出现重复。当种子为1时生成:16,7,20,20,21。如何去除重复,优化此代码,谢谢高手~~

代码如下:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.*;

public class tr22
{
   public final static int TOTAL = 22;
   public final static int NUMBER = 5;

   public static void main(String[] args)
   {
    List<String> list = new ArrayList<String>();
     for(int i = 0; i < TOTAL; i++)
    {
     list.add(i + 1 + "");
    }
   for(int z=1;z<=30;z++)
   {
    StringBuffer sb = new StringBuffer();
    Random r = new Random(z);            //这里要求每次循环都能控制种子数.跟Z值相同.
     for(int j = 0; j < NUMBER; j++)
    {
     int size = list.size();
     String s = list.get(r.nextInt(size));
     sb.append(s);
     if(j != NUMBER -1)
     {
      sb.append(",");
     }
     }
   System.out.println(sb.toString()+" ");
     }
   }
}

加载中
0
JoeyBlue
JoeyBlue
去除重复的话,在26行,sb.append(s)之前做个判断,是否已经存在,如果已经存在就不添加,且j--。 可以用indexOf()进行判断
g
gdstcs
感谢老兄的回复,能不能详细点呢.本人是菜鸟哦...
0
Andre.Z
Andre.Z

要不重复,你每个数都是随机的话,运气不好会一直生成数字,运气最好的时候才是5次。
用个List存放所有数字,每次取其中一个数(随机出个索引值就够了),取完从List删除,再循环,不管怎么都只要随机5次就够了。

g
gdstcs
请把详细点的代码给我,谢谢!!
0
Andre.Z
Andre.Z
List<Integer> all=new ArrayList<Integer>();
for (int i = 1; i < 23; i++) {
	all.add(i);
}
int index=-1;
for (int i = 1; i < 6; i++) {
	index=new Double(Math.random()*all.size()).intValue();
	System.out.println(all.get(index));
	all.remove(index);			
}
取index那里你加上种子啥的算法就是了。
返回顶部
顶部