前言:小小扎马,让我明白好的编程思路,能够让你事半功倍,而如果思路偏了,那么给你带来的痛苦可是要命了。
今天在做一个项目的时候,需要为用户随机生成一个四位编号,编号可以选择区间,并且可以跳过指定数字,另外不能和数据库中已存在的编码重复。刚开始的时候,我的做法是先依据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; }
总结:编程是一门艺术,精致的代码总让你兴奋不已。
相关推荐
使用Spark Graph库和Spark MLlib的大规模监督链接预测 贡献者 1,阿维纳什·兰詹(Avinash Ranjan) ...1.项目在功能上分为多个阶段,每个功能需求都有独立的代码(模块)和依赖项。 (Preprocess_input_text_to
公元前218年至前202年的第二次布匿战争中,尽管汉尼拔在前期取得了一系列胜利,但最终罗马在扎马之战中彻底击败了他,确立了罗马在地中海地区的主导地位。 这些历史事件不仅描绘了意大利历史的演进,也反映了古代...
通过对黑河流域 3 个水文控制站( 莺落峡,祁连山及扎马什克) 径流量进行率定与验证后发现: CMADS + SWAT 模式径流输出结果总体优于 CFSR + SWAT 模式及 TWS + SWAT 模式的模拟结果,利用 CMADS + SWAT 模式亦可很好...
扎马萨马午餐订购应用程序正面跑法: 在本地机器上安装 nodeJs(和 npm - 节点包管理器) 转到前端文件夹在控制台中输入“npm install”。 它将获取所有必要的依赖项。 在控制台中输入“npm start”。 该项目应在...
功能说明: 环境说明: 开发软件:VS 2017 (版本2017以上即可,不能低于2017) 数据库:SqlServer2008r2(数据库版本无限制,都可以导入) 开发模式:mvc。。。
labview程序代码参考学习使用,希望对你有所帮助。
大米外贸商城系统 简称damishop 完全开源版,只需做一种语言一键开启全球133中语言自动翻译功能,价格实现自动汇率转换,集成微信支付宝 paypal以及国外主流支付方式,自带文章博客系统。 软件架构 基于MVC+语言包模式,增加控制台,API导入产品方便对接其他系统(带json示例数据)。 使用要求 PHP7.4+ MYSQL5.6+ REDIS(可选) 安装方法 composer install 打开安装向导安装 http://您的域名/install 特色 1、缓存层增加时间与批量like删除 2、API产品导入方便对接其他系统 3、增加控制台命令行,命令行生成语言翻译包 4、后台一键开启自动翻译模式,支持全球133中语言,由于google代理翻译需要收费,这个功能需要付费。 5、可选购物车与ajax修改购物车产品 6、一键结算checkout 7、增加网站前台自定义路由 方便seo 更新日志 v3.9.7 集成鱼码支付接口,方便个人站长即使收款到账使用 v3.9.3 更新内容 1:增加ueditor与旧编辑器切换 2:增加可视化布局插
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot生鲜鲜花类及生物识别平台源码+论文+视频.zip
毕设和企业适用springboot企业健康管理平台类及视觉识别平台源码+论文+视频.zip
毕设和企业适用springboot视频编辑类及餐饮管理平台源码+论文+视频.zip
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot生鲜鲜花类及全渠道电商平台源码+论文+视频.zip