目录
一.Math
前面有final修饰,意思是这个类是一个最终类,不能被继承;
Math类包含用于执行基本数学运算的方法,初等函数的对数等;
大部分数学计算都可以用Math里面的方法,不需要创建对象,直接调用;
Math类的常用方法:
public static int | abs(int a) | 获取参数绝对值 |
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次幂的值 |
publia static double | random() | 返回值为double的随机值,范围[0,0,1,0) |
import java.util.function.DoubleToIntFunction;
public class MathDemo1 {
public static void main(String[] args) {
//abs 获取参数的绝对值;
System.out.println(Math.abs(-11));
System.out.println(Math.abs(11));
//有个bug:int类型范围:-21477483648~2147483647
//如果没有正数和负数对应,那么传递负数的结果有误;
//进一法:往数轴正方向进一;
System.out.println(Math.ceil(14.56));
//去尾法:向负无穷大方向获取整数;
System.out.println(Math.floor(13.35));
//四舍五入:
System.out.println(Math.round(12.13));
//获取两个整数的较大值;
System.out.println(Math.max(20, 30));
//获取两个整数的较小值;
System.out.println(Math.min(20, 30));
//获取a的b次幂;
System.out.println(Math.pow(2, 3));//8
//细节:如果第二个参数为0-1之间的小数;
System.out.println(Math.pow(4, 0.5));//2.0
//开平方根
System.out.println(Math.sqrt(4));//2.0
//开立方根
System.out.println(Math.cbrt(8));//2.0
}
}
二.两道算法水题
(一)判断一个数是否为一个质数
public class MathDemo2 {
public static void main(String[] args) {
//判断一个数是否为一个质数;
System.out.println(isPrime(13));
System.out.println(isPrime(10));
}
private static boolean isPrime(int number) {
for(int i=2;i<=Math.sqrt(number);i++){
if(number%i==0){
return false;
}
}
return true;
}
}
(二)统计一共有多少个水仙花数
自幂数:一个n位自然数等于自身各个数位上数字的n次幂之和;
如果自幂数是一位数,也叫做独身数;
三位自幂数:水仙花数;
四位自幂数:四叶玫瑰数;
要求1:统计一共有多少个水仙花数。
public class MathDemo3 {
public static void main(String[] args) {
//一共有多少个水仙花数;
//水仙花数:100~999;
int count=0;
for (int i = 100; i < 999; i++) {
int ge=i%10;
int shi=i/10%10;
int bai=i/100%10;
//和每一位的三次方之和和本身进行比较;
double sum=Math.pow(ge,3)+Math.pow(shi,3)+Math.pow(bai,3);
if(sum==i){
count++;
System.out.println(i);
}
}
System.out.println(count);
}
}
要求2:证明没有两位的自幂数。
要求3:分别统计有多少个四叶玫瑰数和五角星数;
三.System
1.System也是一个工具类,提供了一些与系统相关的方法。
public static void exit(int status) | 终止当前运行的Java虚拟机 |
public static long currentTimeMillis() | 返回当前系统的时间毫秒值形式 |
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) | 数组拷贝 |
2.时间原点:1970年1月1日0:0:0,我国在东八区,有八小时时差。
public class SystemDemo1 {
public static void main(String[] args) {
int[] arr1={1,2,3,4,5,6,7,8,9,10};
int[] arr2=new int[10];
//把arr1数组中的数据拷贝到arr2中来
//参数一:数据源,要拷贝的数据从哪个数组而来
//参数二:从数据源数组中的第几个索引开始拷贝
//参数三:目的地,我要把数据拷贝到哪个数组中;
//参数四:目的地数组的索引
//参数五:拷贝的个数;
System.arraycopy(arr1,0,arr2,0,10);
//验证
for (int i = 0; i < arr2.length;i++) {
System.out.print(arr2[i]+"");
}
}
}
3.常见方法:
exit:停止虚拟机;
currentTimeMillis:获取当前时间的毫秒值;
arraycopy:拷贝数组;
4.细节:
1.如果数据源数组和目的地数组都是基本数据类型,那么两者的类型必须保持一致,否则会报错。
2.在拷贝的时候需要考虑数组的长度,如果超出范围也会报错。
3.如果数据源数组和目的地数组都是引用数据类型,那么子类类型可以赋值给父类类型。