开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情
Math
- 是一个帮助我们用于进行数学计算的工具类
- 私有化构造方法,所有的方法都是静态的
Math类的常用方法
方法名 | 说明 |
---|---|
public static int abs(int a) | 返回 int 值的绝对值。 |
public static double ceil(double a) | 向上取整 |
public static double floor(double a) | 向下取整 |
public static int round(float a) | 四舍五入 |
public static int max(int a,int b) | 获取两个int值中的较大值 |
public static double pow(double a,double b) | 返回a的b次幂 |
public static double random() | 返回值为double的随机值,范围[0.0,1.0) |
绝对值
代码测试:
//获取绝对值
System.out.println("获取绝对值");
System.out.println(Math.abs(666));//666
System.out.println(Math.abs(-666));//666
但是存在一个bug:
以int为例,取值范围:-2147483648~2147483647
如果没有正数与负数对应,那么传递负数结果有误
-2147483648没有正数与负数对应,所以abs结果产生bug
System.out.println(Math.abs(-2147483648));//-2147483648
上下取整
上取整
进一法:向正无穷方向获取距离最近的整数
//上取整
System.out.println("上取整");
System.out.println(Math.ceil(12.16));//13.0
System.out.println(Math.ceil(12.66));//13.0
System.out.println(Math.ceil(-12.16));//-12.0
System.out.println(Math.ceil(-12.66));//-12.0
下取整
去尾法:向负无穷方向获取距离最近的整数
//下取整
System.out.println("下取整");
System.out.println(Math.floor(12.16));//12.0
System.out.println(Math.floor(12.66));//12.0
System.out.println(Math.floor(-12.16));//-13.0
System.out.println(Math.floor(-12.66));//-13.0
四舍五入
//四舍五入
System.out.println("四舍五入");
System.out.println(Math.round(12.16));//12
System.out.println(Math.round(12.66));//13
System.out.println(Math.round(-12.16));//-12
System.out.println(Math.round(-12.66));//-13
获取最值
//获取最值
System.out.println("获取最值");
System.out.println(Math.max(66, 88));//88
System.out.println(Math.min(66, 88));//66
a的b次幂
//获取a的b次幂
System.out.println("a的b次幂");
System.out.println(Math.pow(2, 3));//8.0
细节:
- 如果第二个参数是0~1之间的小数
System.out.println(Math.pow(4, 0.5));//2.0
System.out.println(Math.pow(2, -2));//0.25
random随机数
//random随机数
System.out.println("random随机数");
for (int i = 0; i < 10; i++) {
System.out.println(Math.random());
}
输出1~100的随机数:
System.out.println("输出1~100的随机数");
for (int i = 0; i < 10; i++) {
System.out.println(Math.floor(Math.random() * 100 + 1));
}
利用Math.sqrt判断是否是质数
- 我们知道的是,试除法可以判断质数
- 最朴素的做法是从2开始,一直到n-1
- 如果会被整除则不是质数
- 否则是质数
- 但是我们可以只循环到sqrt(n)即可~
public static boolean checkPrime(int x) {
if (x < 2) return false;
for (int i = 2; i <= Math.sqrt(x); i++) {
if (x % i == 0) return false;
}
return true;
}
自幂数
一个n位自然数等于自身各个数位上数字的n次幂之和 举例:三位数 153 四位数 1634
如果自幂数也是一位数,也叫作独身数 三位自幂数:水仙花数 四位自幂数:四叶玫瑰数 五位自幂数:五角星数 六位自幂数:六合数 七位自幂数:北斗七星数 八位自幂数:八仙数 九位自幂数:九九重阳数 十位自幂数:十全十美数
求水仙花数
public static int numFlowers() {
int res = 0;
for (int i = 100; i <= 999; i++) {
int temp = i;
int sum = 0;
while (temp > 0) {
sum += Math.pow(temp % 10, 3);
temp /= 10;
}
if (sum == i) res++;
}
return res;
}