API
记一下类名和类的作用,养成查阅API帮助文档的习惯。
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次幂的值
- public static double random():返回值为double的随机值,范围[0.0,1.0)
public class MathDemo01 { public static void main(String[] args) { /* 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次幂的值 public static double sqrt(double a):返回a的平方根 public static double cbrt(double a):返回a的立方根 public static double random():返回值为double的随机值,范围[0.0,1.0) */ //abs 获取参数的绝对值 System.out.println(Math.abs(88));//88 System.out.println(Math.abs(-88));//88 //bug: //以int类型为例 -2147483648 - 2147483647 //如果没有正数与负数对应,那么传递负数结果有误 //-2147483648 没有正数与之对应,所以abs结果产生bug System.out.println(Math.abs(-2147483648));//-2147483648 System.out.println(Math.abs(-2147483647));//2147483647 //System.out.println(Math.absExact(-2147483648));//JDK15以后,抛出异常 //进一法,往数轴的正方向进一 System.out.println(Math.ceil(12.34));//13.0 System.out.println(Math.ceil(12.54));//13.0 System.out.println(Math.ceil(-12.34));//-12.0 System.out.println(Math.ceil(-12.54));//-12.0 System.out.println("--------------------------"); //去尾法,往数轴的负方向进一 System.out.println(Math.floor(12.34));//12.0 System.out.println(Math.floor(12.54));//12.0 System.out.println(Math.floor(-12.34));//-13.0 System.out.println(Math.floor(-12.54));//-13.0 System.out.println("--------------------------"); //四舍五入 System.out.println(Math.round(12.34));//12 System.out.println(Math.round(12.54));//13 System.out.println(Math.round(-12.34));//-12 System.out.println(Math.round(-12.54));//-13 //获取两个整数的较大值 System.out.println(Math.max(12, 27));//27 //获取两个整数的较小值 System.out.println(Math.min(12, 27));//12 //获取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 //建议: //第二个参数:一般传递大于等于1的正整数 System.out.println(Math.sqrt(4));//2.0 System.out.println(Math.cbrt(8));//2.0 System.out.println("--------------------------"); for (int i = 0; i < 10; i++) { System.out.println(Math.floor(Math.random()*100)+1); } //Math.random() [0.0 1.0) //*100 [0.0 100.0) //floor 去掉了后面的小数 //+1 [1 100.0] } }
练习:
判断一个数是否为一个质数
public class MathDemo02 { public static void main(String[] args) { //判断一个数是否为一个质数 System.out.println(isPrime(997)); //997 2-996 995次 //30次 } public static boolean isPrime(int number) { int count = 0; for (int i = 2; i <= Math.sqrt(number); i++) { count++; if(number % i == 0) { return false; } } System.out.println(count); return true; } }
自幂数,一个n位自然数等于自身各个数位上数字的n次幂之和
举例1:三位数 13+53+3^3=153
举例2:四位数 14+64+34+44=1634
如果自幂数是
-
一位数,也叫做独身数;
-
三位自幂数称为水仙花数;
-
四位自幂数称为四叶玫瑰数;
-
五位自幂数称为五角星数;
-
六位自幂数称为六合数;
-
七位自幂数称为北斗七星数;
-
八位自幂数称为八仙数;
-
九位自幂数称为九九重阳数;
-
十位自幂数称为十全十美数。
要求1:统计一共有多少个水仙花数
要求2:证明没有两位的自幂数
要求3:分别统计有多少个四叶玫瑰数和五角星数(都是3个)
public class MathDemo03 { public static void main(String[] args) { //要求1:统计一共有多少个水仙花数 System.out.println("--------------------"); //水仙花数:100-999 //得到每一个三位数 int count = 0; for (int i = 100; i <= 999; i++) { //个位 十位 百位 int one = i % 10; int ten = i / 10 % 10; int hundred = i / 100; //判断: //每一位的三次方之和跟本身进行比较 double sum = Math.pow(one,3) + Math.pow(ten,3) +Math.pow(hundred,3); if(sum == i) { count++; System.out.println(i); } } System.out.println(count); //要求2:证明没有两位的自幂数 System.out.println("--------------------"); if(getResult()) { System.out.println("存在两位的自幂数"); }else { System.out.println("不存在两位的自幂数"); } //要求3:分别统计有多少个四叶玫瑰数和五角星数(都是3个) System.out.println("--------------------"); int num1 = 4; int num2 = 5; System.out.println("有"+getNumber(num1)+"个四叶玫瑰数"); System.out.println("有"+getNumber(num2)+"个五角星数"); } //证明没有两位的自幂数 public static boolean getResult() { for (int i = 10; i <= 99; i++) { int one = i % 10; int ten = i / 10; double sum = Math.pow(one,2) + Math.pow(ten,2); if(sum == i) { return true; } } return false; } public static int getNumber(int num) { int count = 0; //创建位数数组,如要求四位数的自幂数个数,数组长度为4 //......千 百 十 个 for (int j = (int)Math.pow(10,num-1); j <= (int)Math.pow(10,num)-1; j++) { int[] arr = new int[num]; for (int i = num-1; i >= 0; i--) { arr[i] = (j / (int)Math.pow(10,num-i-1)) % 10; } double sum = 0; for (int i = 0; i < num; i++) { sum += Math.pow(arr[i],num); } if(sum == j) { count++; } } return count; } }
System
System也是一个工具类,提供了一些与系统相关的方法
-
public static void exit(int status):终止当前运行的Java虚拟机
-
public static long currentTimeMillis():返回当前系统的时间毫秒值形式
计算机中的时间原点:1970年1月1日 00:00:00(08:00:00)
原因:1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统。他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX。(故1970年1月1日算C语言的生日)
1秒=1000毫秒,1毫秒=1000微秒,1微秒=1000纳秒
-
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数):数组拷贝
public class SystemDemo01 {
public static void main(String[] args) {
/*
public static void exit(int status):终止当前运行的Java虚拟机
public static long currentTimeMillis():返回当前系统的时间毫秒值形式
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数):数组拷贝
*/
//方法的形参
//状态码:
//0:表示当前虚拟机是正常停止
//非0:表示当前虚拟机异常停止
// System.exit(0);
// System.out.println("看看我执行了吗");//未执行
//当我们需要将整个程序都结束的时候,就可以调用这个方法
long l = System.currentTimeMillis();
System.out.println(l);
//拷贝数组
int[] arr1 = {1,2,3,4,5,6,7,8,9,10};
int[] arr2 = new int[10];
//把arr1数组中的数据拷贝到arr2中
//参数一:数据源,要拷贝的数据从哪个数组而来
//参数二:从数据源数组中的第几个索引开始拷贝
//参数三:目的地,要把数据拷贝到哪个数组中
//参数四:目的地数组的索引
//参数五:拷贝的个数
System.arraycopy(arr1,0,arr2,4,3);
//验证
for (int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i]+" ");
}
//细节:
//1.如果数据源数组和目的地数组都是基本数据类型,那么两者的类型必须保持一致,否则会报错
//2.在拷贝的时候需要考虑数组的长度,如果超出范围也会报错
//3.如果数据源数组和目的地数组都是引用数据类型,那么子类类型可以赋值给父类类型
}
}
Runtime
Runtime表示当前虚拟机的运行环境
- public static Runtime getRuntime():当前系统的运行环境对象
- public void exit(int status):停止虚拟机
- public int availableProcessors():获得CPU的线程数
- public long maxMemory():JVM能从系统中获取总内存大小(单位byte)
- public long totalMemory():JVM已经从系统中获取总内存大小(单位byte)
- public long freeMemory():JVM剩余内存大小(单位byte)
- public Process exec(String command):运行cmd命令
public class RuntimeDemo01 {
public static void main(String[] args) throws IOException {
/*
public static Runtime getRuntime():当前系统的运行环境对象
public void exit(int status):停止虚拟机
public int availableProcessors():获得CPU的线程数
public long maxMemory():JVM能从系统中获取总内存大小(单位byte)
public long totalMemory():JVM已经从系统中获取总内存大小(单位byte)
public long freeMemory():JVM剩余内存大小(单位byte)
public Process exec(String command):运行cmd命令
*/
//1.获取Runtime的对象
Runtime r1 = Runtime.getRuntime();
Runtime r2 = Runtime.getRuntime();
System.out.println(r1 == r2);//true
//2.exit 停止虚拟机
//Runtime.getRuntime().exit(0);
//System.out.println("看看我执行了吗");//未执行
//3.获得CPU的线程数
System.out.println(Runtime.getRuntime().availableProcessors());//8
//4.总内存大小,单位byte字节
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024);//3603
//5.已经获取的总内存大小,单位byte字节
System.out.println(Runtime.getRuntime().totalMemory()/1024/1024);//243
//6.剩余内存大小
System.out.println(Runtime.getRuntime().freeMemory()/1024/1024);//238
//7.运行cmd命令
//shutdown:关机
//加上参数才能执行
//-s:默认在1分钟之后关机
//-s -t 指定时间:指定关机时间
//-a:取消关机操作
//-r:关机并重启
Runtime.getRuntime().exec("shutdown -a");
}
}
BigInteger和BigDecimal
正则表达式
说明:
以上笔记学习是学习b站黑马程序员时记下的笔记,仅限于帮助理解学习,不做任何其他商业用途。