代码随机生成想要的数据

各位读者,下午好啊。这里简单介绍一款工具类,自己随机生成一些想要的数据,话不多说,直接上菜。

目录


1、自己造数据
2、总结


1、自己造数据

这里面用到了枚举,如果没记错的话,基础课程枚举并不是重点,甚至会一掠而过。实际工作中,枚举多用来表示状态机。

以下是:DataSimular.java

package com.hmc.auth;

import java.math.BigDecimal;
import java.net.SocketTimeoutException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import javax.xml.crypto.Data;

import org.apache.catalina.startup.Tomcat.ExistingStandardWrapper;
import org.apache.tomcat.jni.SSLContext.SNICallBack;

/**
Author:meice Huang
Time:2018年7月24日下午11:58:28
*/
public class DataSimulator {
	public static int randomPositiveInt(int max) {
		if(max<0) {
			throw new  IllegalArgumentException("upper boundary can not less than zero");
		}
		return randomInt(0, max);
	}
	
	public static int randomInt(int min,int max) {
		Random random = new Random();
		return random.nextInt(max - min)+min;
	}
	/**
	 * nextInt(int n)
Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.
	官方系统体统了一个参数的方法,为什么不是2个参数呢?因为没必要。
	eg:random.nextInt(5)会生成[0,5)的整数,如果我想生成[3,5)之间的整数,怎么办?需要定义2个参数,一个min,一个max么?NO!
	我们只需要这样操作即可:random.nextInt(max-min)+min,这样会先在[0,(max-min))之间产生2个随机整数,但是我们需要的是[min,max)之间的?那就加上min即可。
	 */
	
	public static String randomCharacters(int limit) {
		if(limit<0) {
			throw new IllegalArgumentException("limit can not less than zero");
		}
		char[] ss = new char[limit];
		int i = 0;
		while(i<limit) {
			int f = (int)(Math.random()*3%3);//这里为什么这么取值?
			if(f==0)
					ss[i] = (char)('A'+randomPositiveInt(26));
			else if(f==1)
					ss[i] = (char)('a'+randomPositiveInt(26));
			else
					ss[i] = (char)('0'+randomPositiveInt(10));
			i++;
		}
		return new String(ss);
	}
	
	/**
	 * 以上这个场景还是蛮多的,比如验证码或者其他的东东
	 */
	
	
	public static String randomAgeUnit() {
		int mod = randomPositiveInt(3)%3;
		if(mod == 0) {
			return "岁";
		} else if(mod == 1) {
			return "月";
		} else 
			return "天";
	}
	
	public static String randomGender() {
		int mod = randomPositiveInt(2)%2;
		if(mod == 0) {
			return "MALE";
		}else 
			return "FEMALE";
	}
	
	
	public static MedicationType randomMedicationType() {
		int mod = randomPositiveInt(3)%3;
		if(mod == 0)
			return MedicationType.INJECTION;
		else if(mod == 1)
			return MedicationType.ORAL;
		else 
			return MedicationType.TOPICAL;
	}
	
	
	public static DrugFrequencyUnit randomDrugRrequency() {
		int mod = randomPositiveInt(2) % 2;
		if(mod == 0)
			return DrugFrequencyUnit.MULTIPLE_DAY_ONE_TIME;
		else 
			return DrugFrequencyUnit.ONE_DAY_MULTIPLE_TIMES;
	}
	
	
	public static TreatmentStatus randomTreatmentStatus() {
		int mod = randomPositiveInt(4) % 4;
		if(mod == 0) 
			return  TreatmentStatus.FINISHED_EFFECTIVE;
		else if(mod == 1)
			return TreatmentStatus.FINISHED_INEFFECTIVE;
		else if(mod == 2)
			return TreatmentStatus.FINISHED_UNKNOWN;
		else 
			return TreatmentStatus.UNFINISHED;
		
	}
	
	public static String randomDrugUnit() {
		int mod = randomPositiveInt(8) % 8;
		switch (mod) {
			case 0:
				return  "g/次";
			case 1:
				return "mg/次";
			case 2:
				return "ug/次";
			case 3:
				return "ng/次";
			case 4:
				return "L/次";
			case 5:
				return "ml/次";
			case 6:
				return "IU/次";
			case 7:
				return "U/次";
			default:
				return "g/次";
		}
	}
	
	public static int randomDistrict() {
		return 110101;
	}
	
	public static String[] randomDiseases() {
		return new String[] {"干眼综合症","兔眼"};
	}
	
	public static Long randomLong() {
		long min = 1;
		long max = 10;
		return min + ((long)(new Random().nextDouble()*(max - min)));
	}
	
	
	public static long randomDate(long begin,long end) {
		long rtn = begin + (long)Math.random()*(begin -end);
		if(rtn == begin|| rtn == end)
			 return randomDate(begin, end);//Exception in thread "main" java.lang.StackOverflowError
		return rtn;
	}
	
	
	public static String randomPhoneNum(String begin) {//这里为什么要带一个参数呢?
		int l = begin.length();
		StringBuilder sb = new StringBuilder(20);
		sb.append(begin);
		Random random = new Random();
		for(int i=0;i<11-l;i++) {
			sb.append(random.nextInt(10));//[0,10)
		}
		return sb.toString();
		
	}
	
	
	public static String getRandomPhoneNum() {
		StringBuffer sb = new StringBuffer();
		Random random  = new Random();
		for(int i=0;i<11;i++) {
			sb.append(random.nextInt(10));
		}
		return sb.toString();
	}
	
	public static String randomIDCard() throws ParseException {//不怎么懂最后一位为什么要这么生成?
		StringBuilder sb = new StringBuilder(20);
		Random random = new Random();
		sb.append(random.nextInt(9)+1);//[1,10)
		//6 10221 19840407 0922
		for(int i=0;i<5;i++) {
			sb.append(random.nextInt(10));//[0,10)
		}
		sb.append(new SimpleDateFormat("yyMMdd").format(randomDate("19000101", "20180101")));
		
		for(int i=0;i<3;i++) {
			sb.append(random.nextInt(10));
		}
		sb.append(lastNumber(sb.toString()));
		return sb.toString();
	}
	
	
	public static char lastNumber(String ID17) {//???What ?
		int x[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
		char y[] = {'1','0','x','9','8','7','6','5','4','3','2'};
		int sum = 0;
		for(int i=0;i<17;i++) {
			int n = ID17.charAt(i)-48;
			sum = sum+n*x[i];
		}
		sum = sum%11;
		return y[sum];
		
	}
	
	
	public static boolean randomTrue() {
		int mod = randomPositiveInt(2)%2;
		return mod == 0;
	}
	
	public static BigDecimal randomPoint(int max) {
		if(max <0)
			throw new IllegalArgumentException("Point should not be less than zero");
		else {
			Double doublePoint = Math.random()*max;
			return new BigDecimal(doublePoint);
		}
	}
	
	
	public static MessageTypeEnum randomMessageType() {
		int mod = randomPositiveInt(8) % 8;
		switch(mod) {
		case 0:
				return MessageTypeEnum.MSL;
		case 1:
				return MessageTypeEnum.FANS;
		case 2:
				return MessageTypeEnum.CASE;
		case 3:
				return MessageTypeEnum.POINT;
		case 4:
				return MessageTypeEnum.NOTICE;
		case 5:
			return MessageTypeEnum.ISSUES;
		case 6:
			return MessageTypeEnum.RELATION;
		default :
			return MessageTypeEnum.USER_CARD;
		}
	}
	
	
	public static Date randomDate(String beginDate,String endDate) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
		Date start = sdf.parse(beginDate);
		Date end  = sdf.parse(endDate);
		if(start.getTime()>=end.getTime()) 
			return null;
		long date = randomDate(start.getTime(), end.getTime());
		return new Date(date);
	}
	
	
	public static void main(String[] args) {
		System.out.println(DataSimulator.randomPositiveInt(7)+3);
		System.out.println(DataSimulator.randomCharacters(5));
		System.out.println(Math.random()*3%3);
		System.out.println((int)(Math.random()*3%3));
		
		System.out.println(randomPositiveInt(3)%3);
		//DataSimulator.randomDate(120, 10);
		System.out.println("=========");
		System.out.println(DataSimulator.randomPhoneNum("kdalfdkalf"));
		System.out.println(DataSimulator.getRandomPhoneNum());
		
	}
}

再放几个枚举类做例子,枚举类会专门发表博客做总结。

eg1:MedicationType.enum

package com.hmc.auth;
/**
Author:meice Huang
Time:2018年7月28日上午5:10:06
*/
public enum MedicationType {
	ORAL,//口服
	INJECTION,//注射
	TOPICAL;//外敷
}

eg2:DrugFrequencyUnit.enum

package com.hmc.auth;
/**
Author:meice Huang
Time:2018年7月28日上午5:16:16
*/
public enum DrugFrequencyUnit {
	//用药按天算,每天几次
	ONE_DAY_MULTIPLE_TIMES,
	//用药按次算,每几天一次
	MULTIPLE_DAY_ONE_TIME;
}

2、总结


1)以上方法有不少都是重复的。不过,上面给出的一个道理就是,如果你需要什么数据,OK,自己造。
2)产生随机数的方法randomPositiveInt(n)%m,这里可以知道,需要几种类型,就可以除以几,Why?数学知识。
3)注意枚举类的活学活用。

欢迎评论交流,下期再会!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值