Java工具类---数字计算工具 NumberUtil
jopen
12年前
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)); } }来自:http://blog.csdn.net/guoxuepeng123/article/details/8797928