从数据库中取出所有号码到数组用math.random()取随机数得到数组下标取出数据
可根据特殊要求取相应的范围递归方法去除已取出的数据奖项级别可在数据库内预留字段
取出数据同时给该数据置字段值

解决方案 »

  1.   

    /**
       * 获取中奖随机数
       * @param
       */
      public static int[] getAwardRandom(int num, int count) {
        int iFirst = 0;
        int[] rtArray = new int[num];
        Random ro = new Random(num * ( (int) (new java.util.Date().getTime())));
        iFirst = ro.nextInt(count) + 1; //产生1--count之间的整数
        rtArray[0] = iFirst;
        for (int i = 1; i < num; i++) {
          Random ri = new Random(i * iFirst * ( (int) (new java.util.Date().getTime())));
          rtArray[i] = ri.nextInt(count) + 1;
          iFirst = rtArray[i];
        }
        return rtArray;
      }
      

  2.   

    /**
         * 产生中奖人(会员号和昵称)
         * @param
         */    public static ArrayList createAwardPerson(HttpServletRequest request) throws
            Exception {
          int num = StringUtil.getIntValue(request, "num");
          if (num <= 0) {
            throw new Exception("数量不能小于等于0!");
          }
          int xscount = getXSCount();
          if (xscount == 0) {
            throw new Exception("数据库中无抽奖纪录!");
          }      int[] xs = new int[xscount];
          xs = getAwardRandom(num, xscount);      ArrayList xsal = xueshenglist();
          ArrayList al = new ArrayList();
          String xsbh = "", username = "";
          for (int i = 0; i < num; i++) {
            //System.out.println("*****************"+xs[i]);
            User u = (User) xsal.get(xs[i]);
            xsbh = u.getXsbh();
            //username = (UserManager.getUser(xsbh)).getUsername();//888888888888888888888888888888888
            username = getUserName(xsbh);
            User awardUser = new User();
            awardUser.setXsbh(xsbh);
            awardUser.setUsername(username);
            al.add(awardUser);
          }      return al;
        }