1最大公约数
public static int GetGCD(int a,int b){
if(a<0 || b<0){
return -1;
}
if(b==0){
return a;
}
while (a%b!=0){
int temp = a % b;
a = b;
b = temp;
}
return b;
}
2角度值-弧度值
public static double Angle2Radian(double angle){
return Math.PI / 180 * angle;
}
public static float GetAngle(float x, float z) {
float angle =(float) (Math.atan2(x, z)* (180.0f / Math.PI));
return angle;
}
3带溢出处理的安全乘 加
public static int SafeMulti(int a , int b){
if(a <= 0 && b <= 0){
return makeMulti(-a , -b);
}
if(a >= 0 && b >= 0){
if(a == Integer.MAX_VALUE || b == Integer.MAX_VALUE ){
return Integer.MAX_VALUE;
}
if(a == 0 || b == 0){
return 0;
}
if(Integer.MAX_VALUE / a <= b){
return Integer.MAX_VALUE;
}
return a * b;
}
return -makeMulti(Math.abs(a), Math.abs(b));
}
public static long SafeMulti(long a , long b){
if(a <= 0 && b <= 0){
return makeMulti(-a , -b);
}
if(a >= 0 && b >= 0){
if(a == Long.MAX_VALUE || b == Long.MAX_VALUE ){
return Long.MAX_VALUE;
}
if(a == 0 || b == 0){
return 0;
}
if(Long.MAX_VALUE / a <= b){
return Long.MAX_VALUE;
}
return a * b;
}
return -makeMulti(Math.abs(a), Math.abs(b));
}
public static int makePlus(int a , int b){
if(a <= 0 && b <= 0){
return -makePlus(-a , -b);
}
if(a >= 0 && b >= 0){
if(a == Integer.MAX_VALUE || b == Integer.MAX_VALUE ){
return Integer.MAX_VALUE;
}
if(Integer.MAX_VALUE - a <= b){
return Integer.MAX_VALUE;
}
return a + b;
}
return a + b;
}
4四舍五入保留两位小数
public static double round(double v) {
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, 2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
5获取随机数 [ start, end ] 或 [ end, start ]
public static int getRandomBetween(final int start, final int end, Random random) {
return end > start ? random.nextInt(end - start + 1) + start : random.nextInt(start - end + 1) + end;
}
6从集合中获取随机一个
public static <T> T getRandom(Collection<T> collections) {
if(collections == null || collections.isEmpty())
return null;
Object[] os = collections.toArray();
int index = getRandomBetween(0, os.length -1);
return (T)os[index];
}
7从 [min, max]中取出一组不重复的随机数
public static java.util.List<Integer> getRandomValues(int min, int max, int num) {
final java.util.List<Integer> list = new java.util.LinkedList<Integer>();
if (max < 0)
return list;
if (num <= 0)
return list;
if (max < min)
return list;
if (num > (max - min + 1)) {
num = max - min + 1;
}
for (int i = 0; i < num; ++i) {
int val = getRandomBetween(min, max);
while (list.contains(val)) {
val = min + ((val + 1 - min) % (max - min + 1));
}
list.add(val);
}
return list;
}
8获得一个不重复的随机序列
public static int[] getRandomArray(int[] totals, int dest) {
if (dest <= 0)
throw new IllegalArgumentException();
if (dest > totals.length)
return totals;
int[] ranArr = new int[dest];
for (int i = 0; i < dest; i++) {
int j = randominstance.nextInt(totals.length - i);
ranArr[i] = totals[j];
totals[j] = totals[totals.length - 1 - i];
}
return ranArr;
}