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

简介: 小小扎马-Java生成指定范围和跳过指定数字的代码

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


      今天在做一个项目的时候,需要为用户随机生成一个四位编号,编号可以选择区间,并且可以跳过指定数字,另外不能和数据库中已存在的编码重复。刚开始的时候,我的做法是先依据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;
  }


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

相关文章
|
11天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
1月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
60 2
|
1月前
|
存储 Java API
键值对魔法:如何优雅地使用Java Map,让代码更简洁?
键值对魔法:如何优雅地使用Java Map,让代码更简洁?
118 2
|
1月前
|
安全 Java API
Java 17新特性让你的代码起飞!
【10月更文挑战第4天】自Java 8发布以来,Java语言经历了多次重大更新,每一次都引入了令人兴奋的新特性,极大地提升了开发效率和代码质量。本文将带你从Java 8一路走到Java 17,探索那些能让你的代码起飞的关键特性。
83 1
|
26天前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
36 5
Java反射机制:解锁代码的无限可能
|
22天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
58 3
|
27天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
78 10
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
70 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
23天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
21天前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
下一篇
无影云桌面