`
qing_gee
  • 浏览: 122222 次
  • 性别: 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”。 该项目应在...

    物业公司绩效考核制度.doc

    物业公司绩效考核制度

    2025最新小学数学义务教育课程标准(2022年版)必考题库附含答案.docx

    2025最新小学数学义务教育课程标准(2022年版)必考题库附含答案.docx

    SDL-1.2.15-17.el7.x64-86.rpm.tar.gz

    1、文件内容:SDL-1.2.15-17.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/SDL-1.2.15-17.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    软件研发绩效考核办法.doc

    软件研发绩效考核办法

    FactoryIO液位PID仿真程序入门指南:使用TIA Portal V15与FactoryIO 2.4.0的梯形图编程,factoryio液位PID仿真程序 使用简单的梯形图编写,通俗易懂,起到抛

    FactoryIO液位PID仿真程序入门指南:使用TIA Portal V15与FactoryIO 2.4.0的梯形图编程,factoryio液位PID仿真程序 使用简单的梯形图编写,通俗易懂,起到抛砖引玉的作用,比较适合有动手能力的入门初学者。 软件环境: 1、西门子编程软件:TIA Portal V15(博图V15) 2、FactoryIO 2.4.0 内容清单: 1、FactoryIO中文说明书+场景模型文件 2、博图V15PLC程序(源码)。 ,核心关键词:FactoryIO液位PID仿真程序; 梯形图编写; 通俗易懂; 入门初学者; 西门子编程软件; TIA Portal V15(博图V15); FactoryIO 2.4.0; FactoryIO中文说明书; 场景模型文件; PLC程序(源码)。,"FactoryIO液位控制:梯形图PID仿真程序"

    微信自动锁定2.0为保护日常隐私3分钟不操作鼠标和键盘自动锁定微信.rar

    # 微信自动锁定:您的隐私保护神器在当今数字化时代,隐私安全日益重要。微信作为我们日常沟通和信息交流的重要工具,其中的隐私保护不容忽视。为了满足大家对微信隐私保护的需求,我们特别推出了“微信自动锁定”软件。 1. **自动锁定**:这是软件的核心功能。当您在使用微信的过程中,若3分钟内没有任何鼠标和键盘操作,软件会自动锁定微信。这一功能有效防止了他人在您离开电脑时,未经授权访问您的微信,保护您的聊天记录、个人信息等隐私不被泄露。 2. **便捷的托盘操作**:程序启动后,会自动收纳到电脑右下角的托盘中,不占用过多屏幕空间,也不会干扰您的正常工作和使用。当您需要退出程序时,只需右键点击托盘图标,选择“退出”即可,操作简单便捷。 3. **灵活的托盘图标设置**:托盘图标支持两种设置方式。您可以选择指定路径的图片作为托盘图标,按照自己的喜好进行个性化设置;也可以使用base64编码的图标,满足不同用户的多样化需求。

    基于Python 的BP神经网络的高频金融时间序列分析毕业设计

    【作品名称】:基于Python 的BP神经网络的高频金融时间序列分析【毕业设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: This project includes three sections. GetData Data crawling. Responsible for crawling and processing the high frequency data of stock transcation in recent years. And the data format would be converted to an appropriate format. predict Core algorithm. Implement the Back Propagation Neural Networks 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

    PackageKit-gtk3-module-1.1.10-2.el7.centos.x64-86.rpm.tar.gz

    1、文件内容:PackageKit-gtk3-module-1.1.10-2.el7.centos.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/PackageKit-gtk3-module-1.1.10-2.el7.centos.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    三相PWM整流器的双闭环控制与C语言实现的PI控制及SVPWM模块技术解析,三相PWM整流器,采用双闭环控制,用C语言实现PI控制,SVPWM等模块 ,核心关键词:三相PWM整流器;双闭环控制;C语

    三相PWM整流器的双闭环控制与C语言实现的PI控制及SVPWM模块技术解析,三相PWM整流器,采用双闭环控制,用C语言实现PI控制,SVPWM等模块。 ,核心关键词:三相PWM整流器;双闭环控制;C语言实现;PI控制;SVPWM模块;,三相PWM整流器双闭环PI控制与SVPWM模块实现

    反激式开关电源仿真研究:电压外环PI控制下12V输出电压及MATLAB建模分析,反激式开关电源,反激仿真电力电子仿真,电压外环PI控制,输入电压18-75V,输出电压12V,输出功率12W,MATLA

    反激式开关电源仿真研究:电压外环PI控制下12V输出电压及MATLAB建模分析,反激式开关电源,反激仿真电力电子仿真,电压外环PI控制,输入电压18-75V,输出电压12V,输出功率12W,MATLAB simulink软件。 ,核心关键词:反激式开关电源; 反激仿真; 电力电子仿真; 电压外环PI控制; 输入电压18-75V; 输出电压12V; 输出功率12W; MATLAB Simulink软件。,基于反激式开关电源的电力电子仿真与电压外环PI控制研究

    电赛小车源码 常规C/C++编程

    电赛小车源码 常规C/C++编程 【核心代码】 ├── 2003智能小车(全国大学生电子设计竞赛) │ ├── BrainCar.M51 │ ├── BrainCar.Opt │ ├── BrainCar.Uv2 │ ├── BrainCar.hex │ ├── BrainCar.lnp │ ├── BrainCar.plg │ ├── BrainCar_Opt.Bak │ ├── BrainCar_Uv2.Bak │ ├── Config.h │ ├── Follow.LST │ ├── Follow.OBJ │ ├── Follow.c │ ├── Follow.h │ ├── IOCfg.LST │ ├── IOCfg.OBJ │ ├── IOCfg.c │ ├── LightDTC.LST │ ├── LightDTC.OBJ │ ├── LightDTC.c │ ├── LightDTC.h │ ├── MetalDTC.LST │ ├── MetalDTC.OBJ │ ├── Met

    alsa-plugins-speex-1.1.6-1.el7.x64-86.rpm.tar.gz

    1、文件内容:alsa-plugins-speex-1.1.6-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/alsa-plugins-speex-1.1.6-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    值得借鉴的IT部门绩效考核范文.docx

    值得借鉴的IT部门绩效考核范文

    双端VSC(三阶)MMC平均值模型四阶小信号模型代码解析与阶跃验证,双端VSC(3阶) MMC平均值模型(4阶)小信号模型代码,小信号阶跃验证代码 ,核心关键词:双端VSC; 3阶; MMC平均值模

    双端VSC(三阶)MMC平均值模型四阶小信号模型代码解析与阶跃验证,双端VSC(3阶) MMC平均值模型(4阶)小信号模型代码,小信号阶跃验证代码 ,核心关键词:双端VSC; 3阶; MMC平均值模型; 4阶; 小信号模型代码; 小信号阶跃验证代码;,双端VSC 3阶小信号模型代码及4阶MMC平均值阶跃验证研究

    P020250120583214598713 2.et

    P020250120583214598713 2.et

    23 采购部门KPI指标(结合BSC).doc

    23 采购部门KPI指标(结合BSC)

Global site tag (gtag.js) - Google Analytics