首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

遇到一个有关问题,给点建议,随机生成7-13位的整数,不能出现前缀码

2011-11-29 
遇到一个问题,给点建议,随机生成7-13位的整数,不能出现前缀码编写程序随机生成1,000,000条不同的电话号码:

遇到一个问题,给点建议,随机生成7-13位的整数,不能出现前缀码
编写程序随机生成1,000,000条不同的电话号码:
(1)号码长度从7位到13位不等。
(2)电话号码必须为前缀码,即一个号码不能是另一个号码的前半部分。如0104568,010456897就不是一组合格的电话号码。

大家给点建议,我无从下手,在线等

[解决办法]

Java code
import java.util.*;/** * 随机生成1,000,000条不同的电话号码: * (1) 号码长度从7位到13位不等。 * (2) 电话号码必须为前缀码,即一个号码不能是另一个号码的前半部分。如0104568,010456897就不是一组合格的电话号码。  * @author autumn (http://blog.csdn.net/autumnhealth) * @version 1.0 */public class RamTelNumTest {    /**   * 默认情况下,最多只能生成197000条左右的满足条件的号码。超过这个数字,会报内存不足。   * 要生成更多的号码,可以指定JVM的参数,例如:   * 如果要生成100万条号码,可以用以下命令来运行:   * java -Xms400m -Xmx400m RamTelNumTest   * @param args   */  public static void main(String[] args) {    Set<String> aSet = createTelNum(198000, 7, 13);    //取消以下注释可以按照字符串顺序在控制台打印生成的号码,但必须花费更多的时间。    /*    TreeSet aTreeSet = new TreeSet(aSet);    Iterator iterator = aTreeSet.iterator();    while(iterator.hasNext()) {      System.out.println("电话号码:\t"+iterator.next());    }    */  }  /**   * 随机生成num条不同的电话号码,位数在minDigit到maxDigit之间,   * 以字符串的形式存储在一个Set集合中,并返回此Set集合。   * @param num 要生成的号码条数   * @param minDigit 最小位数   * @param maxDigit 最大位数   * @return 满足条件的字符串集合   */  public static Set<String> createTelNum(int num, int minDigit, int maxDigit) {    Set<String> rs = new HashSet<String>();    Set<String> tmp = new HashSet<String>();    while(rs.size()<num) {      String sNum = createRandom(minDigit, maxDigit);      boolean bCheck = false;        for(int iEnd=sNum.length(); iEnd >= 7; iEnd--) {          boolean bCheck2 = tmp.add(sNum.substring(0, iEnd));          if(iEnd == sNum.length() && bCheck2)            bCheck = true;          if(!bCheck2) break;      }      if(bCheck) rs.add(sNum);    }    return rs;  }    /**   * 随机生成一个位数在minDigit到maxDigit之间的数,以字符串的形式返回   * @param minDigit 最小位数   * @param maxDigit 最大位数   * @return 一个位数在minDigit到maxDigit之间的数的字符串   */  public static String createRandom(int minDigit, int maxDigit) {    Random ran1 = new Random();    Random ran2 = new Random();    int a = 0;    while(a <= minDigit) {      a = ran1.nextInt(maxDigit);    }    StringBuffer sb = new StringBuffer();    for(int i=0; i<a; i++) {      int b = ran2.nextInt(10);      sb.append(String.valueOf(b));    }    return sb.toString();  }} 

热点排行