在号码池取连续号码的算法

最近项目中需要提供一个选号接口,在一批号码中检索出一批连续的号码供选则。

实现算法如下:

import java.util.*;

public class SerialNum {

 /**
  * 在号码列表中检索出一批连续的号码
  * @param inNum 号码列表
  * @param serialCount 连续的号码个数
  * @return 符合条件的连续的号码
  */
 public List getSerialNum(List inNum,int serialCount)
 {
  int retListCount=inNum.size();//符合条件号码总数
  int serCount=serialCount;     //连续号码数
  List seriesNumList=new ArrayList();//连续的号码列表
  long preNum=0;  //前一个号码
  int serIndex=0; //号段前索引
  int serToIndex=0;//号码段后索引
  /*取一段连续的号码*/
  while(serIndex+serCount<=retListCount)
  {
   serToIndex=serIndex+serCount;
            /*取一段号码*/
   seriesNumList=getSubList(inNum,serIndex,serToIndex);
   for(int i=0;i<serCount;i++)
   {
    long curNum=Long.parseLong(seriesNumList.get(i).toString());//当前号码
    if(i!=0)
    {
     if(curNum-preNum!=1)
     {
      serIndex+=i;
      seriesNumList.clear();
      break;
     }
    }
    preNum=curNum;
    if(i==serCount-1)
    {
     return seriesNumList;
    }
   }

  }
  return seriesNumList;
 }
 /**
  * 从一个列表中取一段列表
  * @param inList 列表
  * @param fromIndex 起始索引
  * @param toIndex 终止索引
  * @return 在列表中起始索引至终止索引的一段列表
  */
 public List getSubList(List inList,int fromIndex,int toIndex)
 {
  List subList=new ArrayList();
  int size=inList.size();
  if(toIndex<=size&&(toIndex-fromIndex)<=size)
  {
      for(int i=fromIndex;i<toIndex;i++)
      {
       subList.add(inList.get(i));
      }
  }
  return subList;
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  List inNumList=new ArrayList();
  inNumList.add("4560000");
  inNumList.add("4560002");
  inNumList.add("4560004");
  inNumList.add("4560005");
  inNumList.add("4560006");
  inNumList.add("4560007");
  inNumList.add("4560008");
  inNumList.add("4560009");
  inNumList.add("4560010");
  inNumList.add("4560012");
  inNumList.add("4560013");
  inNumList.add("4560014");
  inNumList.add("4560015");
  inNumList.add("4560016");
  inNumList.add("4560017");
  inNumList.add("4560018");
  inNumList.add("4560019");
  inNumList.add("4560020");
  inNumList.add("4560200");
  inNumList.add("4560300");
  inNumList.add("4560301");
  inNumList.add("4560302");
  inNumList.add("4560303");
  inNumList.add("4560304");
  inNumList.add("4560305");
  inNumList.add("4560306");
  inNumList.add("4560307");
  inNumList.add("4560308");
  inNumList.add("4560309");
  inNumList.add("4560310");
  inNumList.add("4560311");
  inNumList.add("4560312");
  inNumList.add("4560313");
  inNumList.add("4560314");
  inNumList.add("4560315");
  inNumList.add("4560316");
  inNumList.add("4560317");

  SerialNum serialNum=new SerialNum();
  List serialList=serialNum.getSerialNum(inNumList,7);
  System.out.print(serialList);

 }
}

运行结果:
[4560004, 4560005, 4560006, 4560007, 4560008, 4560009, 4560010]

posted @ 2006-09-23 22:56  xiejava  阅读(48)  评论(0编辑  收藏  举报