`
qing_gee
  • 浏览: 121554 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

小小扎马-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;
	}

 

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

2
2
分享到:
评论
2 楼 qing_gee 2014-10-25  
lzxz1234 写道
第一段代码太麻烦,效率低浪费内存,按你正常的思路往下想就可以了,不要从0-9随机取,一开始就把无效数字删掉 就不会出现 0-1 不停循环的问题了
第二段也太麻烦,直接用 String.format 就可以了


第一种把无效数字去掉是小事,主要的坑点不在于这个,而在于由于指定的区间小的话,而随机产生的四位数却不关心,就导致很少能随机到想要的数字

第二种format方式真的还不曾了解,看了API,“format(Locale l, String format, Object... args)
          使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
static String format(String format, Object... args)
          使用指定的格式字符串和参数返回一个格式化字符串。
”,不曾有发现我需要的
1 楼 lzxz1234 2014-10-24  
第一段代码太麻烦,效率低浪费内存,按你正常的思路往下想就可以了,不要从0-9随机取,一开始就把无效数字删掉 就不会出现 0-1 不停循环的问题了
第二段也太麻烦,直接用 String.format 就可以了

相关推荐

    Supervised_Link_Prediction_Using_Spark_and_Neo4j

    使用Spark Graph库和Spark MLlib的大规模监督链接预测 贡献者 1,阿维纳什·兰詹(Avinash Ranjan) ...1.项目在功能上分为多个阶段,每个功能需求都有独立的代码(模块)和依赖项。 (Preprocess_input_text_to

    意大利历史年表.doc

    公元前218年至前202年的第二次布匿战争中,尽管汉尼拔在前期取得了一系列胜利,但最终罗马在扎马之战中彻底击败了他,确立了罗马在地中海地区的主导地位。 这些历史事件不仅描绘了意大利历史的演进,也反映了古代...

    CMADS数据集及其在流域的运用

    通过对黑河流域 3 个水文控制站( 莺落峡,祁连山及扎马什克) 径流量进行率定与验证后发现: CMADS + SWAT 模式径流输出结果总体优于 CFSR + SWAT 模式及 TWS + SWAT 模式的模拟结果,利用 CMADS + SWAT 模式亦可很好...

    zamaszama:午餐订购应用程序

    扎马萨马午餐订购应用程序正面跑法: 在本地机器上安装 nodeJs(和 npm - 节点包管理器) 转到前端文件夹在控制台中输入“npm install”。 它将获取所有必要的依赖项。 在控制台中输入“npm start”。 该项目应在...

    WebAudioAPIError(解决方案).md

    项目中常见的问题,记录一下解决方案

    avnet(安富利)网站详情页数据样例

    avnet(安富利)网站详情页数据样例

    1-全国各地区建筑业-二级专业承包建筑业企业利润总额2005-2012年-社科数据.zip

    该数据集涵盖了2005至2012年间全国各地区二级专业承包建筑业企业的利润总额。这些数据不仅包括了原始数据,还提供了线性插值和ARIMA填补的版本,以便于研究者能够根据不同的需求选择合适的数据形式进行分析。数据集中包含了行政区划代码、地区名称、是否属于长江经济带、经纬度信息、年份以及利润总额等关键指标。这些指标为评估企业的经营效益和盈利水平提供了重要依据,同时也反映了建筑业在不同地区的发展态势。数据来源为国家统计局,确保了数据的权威性和准确性。通过这些数据,研究者可以深入分析建筑业的经济贡献及其在宏观经济中的作用,为政策制定和行业规划提供数据支持。

    CentOS6.4X64安装Oracle11g中文2.05MB最新版本

    本文档主要讲述的是CentOS6.4 X64安装Oracle11g;在CentOS安装oracle11g比安装oracle10g简单很多,oracle可以不设置比如OS内核参数、防火墙、环境变量等,所以实施时推荐安装oracle11g。感兴趣的朋友可以过来看看

    发动机零部件质量信息反馈及处理表.docx

    发动机零部件质量信息反馈及处理表.docx

    1-全国省市县土地利用类型面板数据2009-2021年-社科数据.zip

    全国省市县土地利用类型面板数据2009-2021年是一项详尽的数据集,它基于土地利用方式和地域差异,对土地资源单元进行细致划分,反映了土地的用途、性质和分布规律。该数据集涵盖了全国各省、地级市、县的土地利用类型,包括耕地、园地、林地、交通运输用地、水域及沙地等多种土地类型。时间范围上,省级和地级市的土地利用类型面板数据覆盖2009至2021年;县级土地利用类型面板数据则从2019年开始至2021年。数据指标丰富,包括行政单位、年份以及各类土地利用的具体分类,如水田、水浇地、旱地、果园、茶园等,以及城镇村及工矿用地、交通运输用地、水域及水利设施用地等。这些数据为政府决策、规划编制以及土地资源管理提供了坚实的数据基础,有助于全面了解土地资源的利用状况,并为未来的规划和管理提供支持。

    MediaError(解决方案).md

    项目中常见的问题,记录一下解决方案

    前端跳槽突围课:React18底层源码深入剖析(完结21章)

    好课分享——前端跳槽突围课:React18底层源码深入剖析(完结21章)

    1111java后端1111Controller

    1111java后端1111Controller

    嵌入式系统开发-STM32单片机-电子春联-代码设计

    嵌入式系统开发-STM32单片机-电子春联-代码设计

    潜在失效模式及后果分析(FMEA)应用流程.docx

    潜在失效模式及后果分析(FMEA)应用流程.docx

    使用Python和Matplotlib创建动态3D圣诞树动画

    内容概要:本文详细介绍了如何使用Python和Matplotlib库创建一个动态的3D圣诞树动画。通过代码示例,展示了几何形状的创建方法,如圣诞树的形状、装饰品和星星的位置计算,以及如何通过动画更新函数实现闪烁效果。 适合人群:具有一定Python编程基础的开发者,尤其是对Matplotlib库和数据可视化感兴趣的读者。 使用场景及目标:① 学习Matplotlib库的基本用法,包括3D绘图和动画制作;② 掌握几何形状的数学建模方法,如圆锥和球体;③ 实践动画效果的实现技巧,提升编程技能。 阅读建议:本教程以具体代码示例为主,理论与实践相结合。建议读者在阅读过程中亲自编写和运行代码,逐步理解每一步骤的实现细节。

    开发一个带有 PCIe Endpoint 设备的驱动程序并实现热插拔功能.docx

    开发一个带有 PCIe Endpoint 设备的驱动程序并实现热插拔功能

    ASP+ACCESS课程教学网站信息交流与发布系统(源代码+论文+外文翻译)(源代码+论文+说明文档).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    消防气压给水设备和稳压泵安装 分项工程质量验收记录表.docx

    消防气压给水设备和稳压泵安装 分项工程质量验收记录表.docx

    Cytoscape-3-10-0-windows-64bit.exe

    Cytoscape-3-10-0-windows-64bit.exe

Global site tag (gtag.js) - Google Analytics