package com.luang.util.common;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
/**
*
* NumberUtil.java
*
* @desc 数字计算工具
* @author Guoxp
* @datatime Apr 7, 2013 3:52:29 PM
*
*/
public class NumberUtil {
/** 生成不重复随机数
* 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组
* @param begin 最小数字(包含该数)
* @param end 最大数字(不包含该数)
* @param size 指定产生随机数的个数
*/
public int[] generateRandomNumber(int begin, int end, int size) {
// 加入逻辑判断,确保begin<end并且size不能大于该表示范围
if (begin >= end || (end - begin) < size) {
return null;
}
// 种子你可以随意生成,但不能重复
int[] seed = new int[end - begin];
for (int i = begin; i < end; i ++) {
seed[i - begin] = i;
}
int[] ranArr = new int[size];
Random ran = new Random();
// 数量你可以自己定义。
for (int i = 0; i < size; i++) {
// 得到一个位置
int j = ran.nextInt(seed.length - i);
// 得到那个位置的数值
ranArr[i] = seed[j];
// 将最后一个未用的数字放到这里
seed[j] = seed[seed.length - 1 - i];
}
return ranArr;
}
/** 生成不重复随机数
* 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组
* @param begin 最小数字(包含该数)
* @param end 最大数字(不包含该数)
* @param size 指定产生随机数的个数
*/
public Integer[] generateBySet(int begin, int end, int size) {
// 加入逻辑判断,确保begin<end并且size不能大于该表示范围
if (begin >= end || (end - begin) < size) {
return null;
}
Random ran = new Random();
Set<Integer> set = new HashSet<Integer>();
while (set.size() < size) {
set.add(begin + ran.nextInt(end - begin));
}
Integer[] ranArr = new Integer[size];
ranArr = set.toArray(new Integer[size]);
//ranArr = (Integer[]) set.toArray();
return ranArr;
}
/**
* 判断String是否是整数
*/
public boolean isInteger(String s){
if((s != null)&&(s!=""))
return s.matches("^[0-9]*$");
else
return false;
}
/**
* 判断字符串是否是浮点数
*/
public boolean isDouble(String value) {
try {
Double.parseDouble(value);
if (value.contains("."))
return true;
return false;
} catch (NumberFormatException e) {
return false;
}
}
/**
* 判断字符串是否是数字
*/
public boolean isNumber(String value) {
return isInteger(value) || isDouble(value);
}
//排序方法
public static void sort(int[] array) {// 小到大的排序
int temp = 0;
for (int i = 0; i < array.length; i++) {
for (int j = i; j < array.length; j++) {
if (array[i] > array[j]) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
/**
* 是否是质数
*/
public static boolean isPrimes(int n) {
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
/**
* 阶乘
* @param n
* @return
*/
public static int factorial(int n) {
if (n == 1) {
return 1;
}
return n * factorial(n - 1);
}
/**
* 平方根算法
* @param x
* @return
*/
public static long sqrt(long x) {
long y = 0;
long b = (~Long.MAX_VALUE) >>> 1;
while (b > 0) {
if (x >= y + b) {
x -= y + b;
y >>= 1;
y += b;
} else {
y >>= 1;
}
b >>= 2;
}
return y;
}
private int math_subnode(int selectNum, int minNum) {
if (selectNum == minNum) {
return 1;
} else {
return selectNum * math_subnode(selectNum - 1, minNum);
}
}
private int math_node(int selectNum) {
if (selectNum == 0) {
return 1;
} else {
return selectNum * math_node(selectNum - 1);
}
}
/**
* 可以用于计算双色球、大乐透注数的方法
* selectNum:选中了的小球个数
* minNum:至少要选中多少个小球
* 比如大乐透35选5可以这样调用processMultiple(7,5);
* 就是数学中的:C75=7*6/2*1
*/
public int processMultiple(int selectNum, int minNum) {
int result;
result = math_subnode(selectNum, minNum)
/ math_node(selectNum - minNum);
return result;
}
/**
* 求m和n的最大公约数
*/
public static int gongyue(int m, int n) {
while (m % n != 0) {
int temp = m % n;
m = n;
n = temp;
}
return n;
}
/**
* 求两数的最小公倍数
*/
public static int gongbei(int m, int n) {
return m * n / gongyue(m, n);
}
/**
* 递归求两数的最大公约数
*/
public static int divisor(int m,int n){
if(m%n==0){
return n;
}else{
return divisor(n,m%n);
}
}
public static void main(String[] args){
NumberUtil util=new NumberUtil();
System.out.println(util.sqrt(100));
}
}
分享到:
相关推荐
DataUtil--数据工具类--数据类型判断和比较,包括判断字符串是否为空,判断字符串不为空,判断是否为数字,判断是否为整型数字,判断是否为日期字符串(格式如:2014-04-01),判断是否为时间字符串(格式如:2014-...
不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);
对象与对象转换工具类-就Javabean
http请求工具类-HttpClientUtils 还需要HttpClientResult类
微信小程序开发-工具类-画布:时钟案例源码.zip
java通过snakeyaml类能非常方便的操作,读写yaml文件。
微信小程序开发-工具类-搜索框案例源码.zip
计算工具-利润计算工具
而“高通写号工具”(QualcommTool-eMMC)就是针对这类存储设备进行数据写入和管理的专业工具。 本篇将深入解析高通写号工具QualcommTool-eMMC-v3.2的关键知识点,以及它在实际应用中的作用和操作流程。 1. **高通...
AI视频工具-万兴科技推出的AI数字人营销口播工具
数字金融工具变量---杭州到各城市球面直线距离,需要的直接下载哟~
AI视频工具-来画:动画和数字人智能生成平台
这款名为"沸点-压力计算工具"的应用程序,就是为了解决这一问题而设计的。 首先,我们要理解沸点的概念。沸点是指一种液体在其蒸气压等于外界大气压时的温度,此时液体与蒸汽可以共存,并且会发生沸腾现象。不同的...
windows-md5&hash计算工具-免安装
android对称加密AES-128-CBC加密的工具类-附件资源
1小时玩转数字电路.rar AHB-SRAMC和FIFO的设计与验证.rar clock skew.rar IC攻城狮求职宝典.rar linux basic.rar Linux EDA虚拟机 - 个人学习IC设计.rar Perl语言在芯片设计中的应用.rar SoC芯片设计技能专题.rar ...
[工具类] Java中计算任意两个日期之间的工作天数 .java.txt [工具类] java抓取网页 .java.txt [工具类] MD5 .java.txt [工具类] MD5强化版 .java.txt [工具类] MD5超强化版 .java.txt [工具类] XML 实用工具类 .java...
68 数字图像处理工具箱DIPUM Toolbax V1.1.3 69 遗传算法工具箱 70 鱼群算法工具箱OptimizedAFSAr 71 蚁群算法工具箱 72 matlab优化工具箱 73 数据包络分析工具箱 74 图像分割质量评估工具包 75 相关向量机工具箱 76...
2. **高程计算**:工具集可能提供了海拔高度的计算,包括水准测量、GPS高程拟合和数字高程模型(DEM)分析等功能,这些对于地形分析和测绘工作非常有用。 3. **空间参考系转换**:在地理信息系统(GIS)中,不同...
小工具--CRC校验计算工具V1.00适合搬砖工哈哈哈哈QT5.9.0开发,后面再来增加东西,脑壳痛