前言:小小扎马,让我明白好的编程思路,能够让你事半功倍,而如果思路偏了,那么给你带来的痛苦可是要命了。

今天在做一个项目的时候,需要为用户随机生成一个四位编号,编号可以选择区间,并且可以跳过指定数字,另外不能和数据库中已存在的编码重复。刚开始的时候,我的做法是先依据0-9生成一个随机的四位数字,然后再判断该数字是否在指定范围,并且是否包含有指定数字等等,最后发现,这个想法有很大的漏洞,如果指定范围为0-1,我的while写法要跑上很大一阵功夫。

那接下来我不知道突然一个想法浮现在脑海,便产生了以下代码

/*** 根据开始编号、结束编号、带四标记、已存在的会员编号,生成四位的序号* * @param startnumStr* @param endnumStr* @param containsSomeCharFlag* @param existNumStrs* @param somenum* @return*/public static String generateNum(String startnumStr, String endnumStr, boolean containsSomeCharFlag,List<String> existNumStrs, String somenum) {// 创建一个数组List<String> list = new ArrayList<String>();int startnum = 0;int endnum = 9999;// 开始数字if (startnumStr != null && !"".equals(startnumStr)) {startnum = Integer.parseInt(startnumStr);}// 结束数字if (endnumStr != null && !"".equals(endnumStr)) {endnum = Integer.parseInt(endnumStr);}// 如果说用户指定的开始数字比结束数字还大,则返回错误信息if (startnum > endnum) {return "错误:请重新指定编号的范围";}for (int i = startnum; i <= endnum; i++) {String num = getZeroStrOfLen(4, String.valueOf(i));// 如果i不存在,那么加入if (!existNumStrs.contains(num)) {// 假如不包含某个数字if (!containsSomeCharFlag) {if (num.indexOf(somenum) == -1 ) {list.add(num);}} else {// 如果包含某个数字,则不需要判断list.add(num);}}}// 此时生成的列表中,就包含了用户需要编号,那么随机一个int index = new Random().nextInt(list.size());return list.get(index);}

以上代码的思路,就是依据条件生成随机数的集合,然后再随机一个下标取出对应数据。当然不知道这个方法是不是最优,如果有朋友有更加简洁的方法,可以写出来,我来拜读一下。

还有一个方法的代码也贴出来吧,对字符串的补零操作

/*** 对字符串进行补零.* * @return*/public static String getZeroStrOfLen(int len, String temp) {String result = "";if (temp != null) {if (temp.length() == len) {result = temp;} else if (temp.length() > len) {// 取后几位result = temp.substring(temp.length() - len);} else {for (int i = 0; i < len - temp.length(); i++) {result += "0";}result += temp;}}return result;}

总结:编程是一门艺术,精致的代码总让你兴奋不已。

小小扎马-Java生成指定范围和跳过指定数字的代码相关推荐

  1. 【笔记】微信开发者工具自定义编译模式(编译时,携带 指定参数 直接跳转 指定页面)

    文章目录 问题 解决 问题 发现这个神奇功能之前,一般都是在 app.json 下 pages 里将当前页面置顶,参数写死... 或是,什么都不做,繁琐的一级一级的点,直到从首页进入需要调试页面... ...

  2. java 生成印章源码_java代码生成指定的公章和私章,并且解决服务器不能回显文字的问题...

    因项目需求所需,需要用java根据字段生成公章,在这里特别感谢大佬们贡献的代码,由衷的表示感谢,我充分发挥了搬砖的作用,因为在中间遇到了服务器上没有字的问题,故写下次文章,作为记录,希望能帮助到童鞋们 ...

  3. java生成随机密码,包含大小写字母,数字,特殊字符等

    public static String generatePwd() {// 生成指定长度(2)的大写字母String upperCaseLetters = RandomStringUtils.ran ...

  4. 第一行代码 java 光盘_如何买卖光盘附带的数字电影代码

    第一行代码 java 光盘 At the moment, we're in a transition to an all-digital world of entertainment, and we' ...

  5. java生成任意整数随机数(任意指定范围)

    首先要说的是:很多人分不清临界值是否取得到! 第一种办法,Math.random() 他的范围是0.0与1.0之间的伪随机数字,包括0不包括1(什么是伪随机?在本文章最下面有简单的介绍). 在这里我举 ...

  6. JAVA生成高强度密码(包含随机数字+随机英文大小写)

    在这个小代码中支持密码长度的自选 import java.util.Random; import java.util.Scanner;// 在本文件中利用随机数+ASCII值码来实现Authentic ...

  7. java 生成对称密钥_Java中创建对称密钥的代码

    1 加密 public static byte[] jiami() throws Exception { //密钥生成器 KeyGenerator key=KeyGenerator.getInstan ...

  8. Java 找出四位数的所有吸血鬼数字 基础代码实例

    /**  * 找出四位数的所有吸血鬼数字  * 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序.  * 以两个 ...

  9. 微信唤起外部浏览器打开指定链接 微信跳转下载APP实现代码

    推广分析 通过扫描二维码下载APP已成为一个大家惯用且非常方便的下载方式了,微信也成为扫描二维码重要的工具,很多商家也是熟知这一点,所以纷纷选择微信推广.然而在我们使用微信推广的时候,经常会遇到app ...

最新文章

  1. [bbk4966]第70集 第8章 -性能维护 01
  2. 你选的那些创业方向 可能正在毁掉你!
  3. Java基础篇:内部类详解
  4. redis setnx 分布式锁_Redis 分布式锁PHP
  5. 微软OOXML正式成为国际标准 更名为OXML
  6. 使用cmake时发生not providing *.cmake in CMAKE_MODULE_PATH类错误的解决办法
  7. android dialog 隐藏状态栏_Flutter-最近搞了个项目-启动页Splash,Navigator.pop无法关闭Dialog...
  8. 国内少有的Flutter干货分享:Flutter的原理及美团的实践!
  9. 如何将其他注册商处的域名申请转出并转入阿里云(图文教程)
  10. 怎么用计算机弹春天在哪里,春天在哪里
  11. vlan是什么?如何划分vlan?如何实现vlan?使用vlan的优点!
  12. Photoshop中的标尺、参考线
  13. JavaScript 判断是否是数字 isFinite() Number.isFinite()
  14. 修改windows自带录音机录音时间方法
  15. 从零开始的ZYNQ学习(基于矿卡EBAZ4205)(一)
  16. 火影忍者379在线观看
  17. APIView 怎么写?
  18. java读取 png_JAVA如何操作PNG图片
  19. win10软件拒绝访问删不掉_win10结束进程时拒绝访问的处理办法
  20. ANDROID物联网开发从入门到实战附源码

热门文章

  1. 将具体的秒数转换为几天几小时几分钟
  2. uniapp授权登陆操作
  3. android 设置联系人头像代码,android如何取得本地通讯录的头像的原图的实现代码...
  4. 非稳态计算时间步和最大迭代数的设定(分享)
  5. 码出高效:Java开发手册笔记(线程池及其源码)
  6. uniapp中web-view的使用
  7. jsp教学网站百度文库_精品课程JSP教学网站的评价研究
  8. 背记不如实战系列-javaGUI实例-计算器制作
  9. 读书笔记-Icepak自然冷却模拟设置步骤
  10. 前端CryptoJS加解密