|
| 1 | +--- |
| 2 | +typora-copy-images-to: img |
| 3 | +--- |
| 4 | + |
| 5 | +### Math类 |
| 6 | + |
| 7 | +Math类是数学操作类,Math类提供了常用的一些数学函数,如:三角函数、对数、指数等。一个数学公式如果想用代码表示,则可以将其拆分然后套用Math类下的方法即可。 |
| 8 | + |
| 9 | +Math类中有两个静态常量PI和E,分别代表数学常量π和e。 |
| 10 | + |
| 11 | +```java |
| 12 | +Math.abs(12.3); //12.3 返回这个数的绝对值 |
| 13 | +Math.abs(-12.3); //12.3 |
| 14 | + |
| 15 | +Math.copySign(1.23, -12.3); //-1.23,返回第一个参数的量值和第二个参数的符号 |
| 16 | +Math.copySign(-12.3, 1.23); //12.3 |
| 17 | + |
| 18 | +Math.signum(x); //如果x大于0则返回1.0,小于0则返回-1.0,等于0则返回0 |
| 19 | +Math.signum(12.3); //1.0 |
| 20 | +Math.signum(-12.3); //-1.0 |
| 21 | +Math.signum(0); //0.0 |
| 22 | + |
| 23 | + |
| 24 | +//指数 |
| 25 | +Math.exp(x); //e的x次幂 |
| 26 | +Math.expm1(x); //e的x次幂 - 1 |
| 27 | + |
| 28 | +Math.scalb(x, y); //x*(2的y次幂) |
| 29 | +Math.scalb(12.3, 3); //12.3*2³ |
| 30 | + |
| 31 | +//取整 |
| 32 | +Math.ceil(12.3); //返回最近的且大于这个数的整数13.0 |
| 33 | +Math.ceil(-12.3); //-12.0 |
| 34 | + |
| 35 | +Math.floor(12.3); //返回最近的且小于这个数的整数12.0 |
| 36 | +Math.floor(-12.3); //-13.0 |
| 37 | + |
| 38 | +//x和y平方和的二次方根 |
| 39 | +Math.hypot(x, y); //√(x²+y²) |
| 40 | + |
| 41 | +//返回概述的二次方根 |
| 42 | +Math.sqrt(x); //√(x) x的二次方根 |
| 43 | +Math.sqrt(9); //3.0 |
| 44 | +Math.sqrt(16); //4.0 |
| 45 | + |
| 46 | +//返回该数的立方根 |
| 47 | +Math.cbrt(27.0); //3 |
| 48 | +Math.cbrt(-125.0); //-5 |
| 49 | + |
| 50 | +//对数函数 |
| 51 | +Math.log(e); //1 以e为底的对数 |
| 52 | +Math.log10(100); //10 以10为底的对数 |
| 53 | +Math.log1p(x); //Ln(x+ 1) |
| 54 | + |
| 55 | +//返回较大值和较小值 |
| 56 | +Math.max(x, y); //返回x、y中较大的那个数 |
| 57 | +Math.min(x, y); //返回x、y中较小的那个数 |
| 58 | + |
| 59 | +//返回 x的y次幂 |
| 60 | +Math.pow(x, y); |
| 61 | +Math.pow(2, 3); //即2³ 即返回:8 |
| 62 | + |
| 63 | +//随机返回[0,1)之间的无符号double值 |
| 64 | +Math.random(); |
| 65 | + |
| 66 | +//返回最接近这个数的整数,如果刚好居中,则取偶数 |
| 67 | +Math.rint(12.3); //12.0 |
| 68 | +Math.rint(-12.3); //-12.0 |
| 69 | +Math.rint(78.9); //79.0 |
| 70 | +Math.rint(-78.9); //-79.0 |
| 71 | +Math.rint(34.5); //34.0 |
| 72 | +Math.rint(35.5); //36.0 |
| 73 | + |
| 74 | +Math.round(12.3); //与rint相似,返回值为long |
| 75 | + |
| 76 | +//三角函数 |
| 77 | +Math.sin(α); //sin(α)的值 |
| 78 | +Math.cos(α); //cos(α)的值 |
| 79 | +Math.tan(α); //tan(α)的值 |
| 80 | + |
| 81 | +//求角 |
| 82 | +Math.asin(x/z); //返回角度值[-π/2,π/2] arc sin(x/z) |
| 83 | +Math.acos(y/z); //返回角度值[0~π] arc cos(y/z) |
| 84 | +Math.atan(y/x); //返回角度值[-π/2,π/2] |
| 85 | +Math.atan2(y-y0, x-x0); //同上,返回经过点(x,y)与原点的的直线和经过点(x0,y0)与原点的直线之间所成的夹角 |
| 86 | + |
| 87 | +Math.sinh(x); //双曲正弦函数sinh(x)=(exp(x) - exp(-x)) / 2.0; |
| 88 | +Math.cosh(x); //双曲余弦函数cosh(x)=(exp(x) + exp(-x)) / 2.0; |
| 89 | +Math.tanh(x); //tanh(x) = sinh(x) / cosh(x); |
| 90 | + |
| 91 | +//角度弧度互换 360°角=2π弧度 |
| 92 | +Math.toDegrees(angrad); //角度转换成弧度,返回:angrad * 180d / PI |
| 93 | + |
| 94 | +Math.toRadians(angdeg); //弧度转换成角度,返回:angdeg / 180d * PI |
| 95 | + |
| 96 | +Math.PI |
| 97 | +``` |
| 98 | +```java |
| 99 | +package cn.itcast.chapter05.example15; |
| 100 | +/** |
| 101 | + * Math类中比较常见的方法 |
| 102 | + */ |
| 103 | +public class Example15 { |
| 104 | + public static void main(String[] args) { |
| 105 | + System.out.println("计算绝对值的结果: " + Math.abs(-1)); |
| 106 | + System.out.println("求大于参数的最小整数: " + Math.ceil(5.6)); |
| 107 | + System.out.println("求小于参数的最大整数: " + Math.floor(-4.2)); |
| 108 | + System.out.println("对小数进行四舍五入后的结果: " + Math.round(-4.6)); |
| 109 | + System.out.println("求两个数的较大值: " + Math.max(2.1, -2.1)); |
| 110 | + System.out.println("求两个数的较小值: " + Math.min(2.1, -2.1)); |
| 111 | + System.out.println("生成一个大于等于0.0小于1.0随机值: " + Math.random()); |
| 112 | + } |
| 113 | +} |
| 114 | +``` |
| 115 | + |
| 116 | +### Random类 |
| 117 | + |
| 118 | +在JDK的java.util包中有一个Random类,它可以在指定的取值范围内随机产生数字。在Random类中提供了两个构造方法,具体如下表所示。 |
| 119 | + |
| 120 | + |
| 121 | + |
| 122 | +表中列举了Random类的两个构造方法,其中第一个构造方法是无参的,通过它创建的Random实例对象每次使用的种子是随机的,因此每个对象所产生的随机数不同。如果希望创建的多个Random实例对象产生相同序列的随机数,则可以在创建对象时调用第二个构造方法,传入相同的种子即可。 |
| 123 | + |
| 124 | +相对于Math的random()方法而言,Random类提供了更多的方法来生成各种伪随机数,不仅可以生成整数类型的随机数,还可以生成浮点类型的随机数,表中列举了Random类中的常用方法。 |
| 125 | + |
| 126 | + |
| 127 | + |
| 128 | +表中,列出了Random类常用的方法,其中,Random类的nextDouble()方法返回的是0.0和1.0之间double类型的值,nextFloat()方法返回的是0.0和1.0之间float类型的值,nextInt(int n)返回的是0(包括)和指定值n(不包括)之间的值。 |
| 129 | + |
| 130 | +```java |
| 131 | +package cn.itcast.chapter05.example16; |
| 132 | +import java.util.Random; |
| 133 | +/** |
| 134 | + * 使用构造方法Random()产生随机数 |
| 135 | + */ |
| 136 | +public class Example16 { |
| 137 | + public static void main(String args[]) { |
| 138 | + Random r = new Random(); // 不传入种子 |
| 139 | + // 随机产生10个[0,100)之间的整数 |
| 140 | + for (int x = 0; x < 10; x++) { |
| 141 | + System.out.println(r.nextInt(100)); |
| 142 | + } |
| 143 | + } |
| 144 | +} |
| 145 | +``` |
| 146 | + |
| 147 | +```java |
| 148 | +package cn.itcast.chapter05.example17; |
| 149 | +import java.util.Random; |
| 150 | +/** |
| 151 | + * 使用构造方法Random(long seed)产生随机数 |
| 152 | + */ |
| 153 | +public class Example17 { |
| 154 | + public static void main(String args[]) { |
| 155 | + Random r = new Random(13); // 创建对象时传入种子 |
| 156 | + // 随机产生10个[0,100)之间的整数 |
| 157 | + for (int x = 0; x < 10; x++) { |
| 158 | + System.out.println(r.nextInt(100)); |
| 159 | + } |
| 160 | + } |
| 161 | +} |
| 162 | +``` |
| 163 | + |
| 164 | +```java |
| 165 | +package cn.itcast.chapter05.example18; |
| 166 | +import java.util.Random; |
| 167 | +/** |
| 168 | + * Random类中的常用方法 |
| 169 | + */ |
| 170 | +public class Example18 { |
| 171 | + public static void main(String[] args) { |
| 172 | + Random r1 = new Random(); // 创建Random实例对象 |
| 173 | + System.out.println("产生float类型随机数: " + r1.nextFloat()); |
| 174 | + System.out.println("产生0~100之间int类型的随机数:" + r1.nextInt(100)); |
| 175 | + System.out.println("产生double类型的随机数:" + r1.nextDouble()); |
| 176 | + } |
| 177 | +} |
| 178 | +``` |
0 commit comments