之前忘了完成动手动脑的作业,正好今天没课先写动手动脑再去想怎么完成javaweb的界面
一、Math类的测试
反函数在前面加a,双曲在后面加h
熟练掌握数学类函数能够让之后代码中的计算变得更加方便
public class work { public static void main(String[] args) { /*---------下面是三角运算---------*/ //将弧度转换角度 System.out.println("Math.toDegrees(1.57):" + Math.toDegrees(1.57)); //将角度转换为弧度 System.out.println("Math.toRadians(90):" + Math.toRadians(90)); //计算反余弦,返回的角度范围在 0.0 到 pi 之间。 System.out.println("Math.acos(0.3):" + Math.acos(1.2)); //计算反正弦;返回的角度范围在 -pi/2 到 pi/2 之间。 System.out.println("Math.asin(0.8):" + Math.asin(0.8)); //计算反正切;返回的角度范围在 -pi/2 到 pi/2 之间。 System.out.println("Math.atan(2.3):" + Math.atan(2.3)); //计算三角余弦。 System.out.println("Math.cos(1.57):" + Math.cos(1.57)); //计算值的双曲余弦。 System.out.println("Math.cosh(1.2 ):" + Math.cosh(1.2 )); //计算正弦 System.out.println("Math.sin(1.57 ):" + Math.sin(1.57 )); //计算双曲正弦 System.out.println("Math.sinh(1.2 ):" + Math.sinh(1.2 )); //计算三角正切 System.out.println("Math.tan(0.8 ):" + Math.tan(0.8 )); //计算双曲正切 System.out.println("Math.tanh(2.1 ):" + Math.tanh(2.1 )); //将矩形坐标 (x, y) 转换成极坐标 (r, thet));,返回所得角 theta。 System.out.println("Math.atan2(0.1, 0.2):" + Math.atan2(0.1, 0.2)); /*---------下面是取整运算---------*/ //取整,返回小于目标数的最大整数。 System.out.println("Math.floor(-1.2 ):" + Math.floor(-1.2 )); //取整,返回大于目标数的最小整数。 System.out.println("Math.ceil(1.2):" + Math.ceil(1.2)); //四舍五入取整 System.out.println("Math.round(2.3 ):" + Math.round(2.3 )); /*---------下面是乘方、开方、指数运算---------*/ //计算平方根。 System.out.println("Math.sqrt(2.3 ):" + Math.sqrt(2.3 )); //计算立方根。 System.out.println("Math.cbrt(9):" + Math.cbrt(9)); //返回欧拉数 e 的n次幂。 System.out.println("Math.exp(2):" + Math.exp(2)); //返回 sqrt(x2:" +y2),没有中间溢出或下溢。 System.out.println("Math.hypot(4 , 4):" + Math.hypot(4 , 4)); // 按照 IEEE 754 标准的规定,对两个参数进行余数运算。 System.out.println("Math.IEEEremainder(5 , 2):" + Math.IEEEremainder(5 , 2)); //计算乘方 System.out.println("Math.pow(3, 2):" + Math.pow(3, 2)); //计算自然对数 System.out.println("Math.log(12):" + Math.log(12)); //计算底数为 10 的对数。 System.out.println("Math.log10(9):" + Math.log10(9)); // 回参数与 1 之和的自然对数。 System.out.println("Math.log1p(9):" + Math.log1p(9)); /*---------下面是符号相关的运算---------*/ //计算绝对值。 System.out.println("Math.abs(-4.5):" + Math.abs(-4.5)); //符号赋值,返回带有第二个浮点数符号的第一个浮点参数。 System.out.println("Math.copySign(1.2, -1.0):" + Math.copySign(1.2, -1.0)); //符号函数;如果参数为 0,则返回 0;如果参数大于 0,则返回 1.0;如果参数小于 0,则返回 -1.0。 System.out.println("Math.signum(2.3):" + Math.signum(2.3)); /*---------下面是大小相关的运算运算---------*/ //找出最大值 System.out.println("Math.max(2.3 , 4.5):" + Math.max(2.3 , 4.5)); //计算最小值 System.out.println("Math.min(1.2 , 3.4):" + Math.min(1.2 , 3.4)); //返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。 System.out.println("Math.nextAfter(1.2, 1.0):" + Math.nextAfter(1.2, 1.0)); //返回比目标数略大的浮点数 System.out.println("Math.nextUp(1.2 ):" + Math.nextUp(1.2 )); //返回一个伪随机数,该值大于等于 0.0 且小于 1.0。 System.out.println("Math.random():" + Math.random()); } }
int类的求平方函数
public class work { public static void main(String[] args) { int result; for (int x = 1; x <= 10; x++) { result = square(x); // Math库中也提供了求平方数的方法 // result=(int)Math.pow(x,2); System.out.println("The square of " + x + " is " + result + "\n"); } } // 自定义求平方数的静态方法 public static int square(int y) { return y * y; } }
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、随机数
import javax.swing.JOptionPane; //用于生成一个显示框 public class work { public static void main( String args[] ) { int value; //output为之后输出的格式 String output = ""; for ( int i = 1; i <= 20; i++ ) { value = 1 + (int) ( Math.random() * 6 ); output += value + " "; if ( i % 5 == 0 ) output += "\n"; } //生成一个显示输出消息的框输出output JOptionPane.showMessageDialog( null, output, "20 Random Numbers from 1 to 6", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }
这个和之前的写的生成二年级学生题目用的随机数生成方式不同,这个用的是math,之前的那个是引入的random类创建random对象来实现的
import java.util.Arrays; import java.util.Random; public class work { public static void main(String[] args) { Random rand = new Random(); System.out.println("rand.nextBoolean():" + rand.nextBoolean()); byte[] buffer = new byte[16]; rand.nextBytes(buffer); //将数组转换为String类并进行输出 System.out.println(Arrays.toString(buffer)); //生成0.0~1.0之间的伪随机double数 System.out.println("rand.nextDouble():" + rand.nextDouble()); //生成0.0~1.0之间的伪随机float数 System.out.println("rand.nextFloat():" + rand.nextFloat()); //生成平均值是 0.0,标准差是 1.0的伪高斯数 System.out.println("rand.nextGaussian():" + rand.nextGaussian()); //生成一个处于long整数取值范围的伪随机整数 System.out.println("rand.nextInt():" + rand.nextInt()); //生成0~26之间的伪随机整数 System.out.println("rand.nextInt(26):" + rand.nextInt(26)); //生成一个处于long整数取值范围的伪随机整数 System.out.println("rand.nextLong():" + rand.nextLong()); } }
这个是利用的random类生成的随机数
import java.util.Random; public class work { public static void main(String[] args) { Random r1 = new Random(50); System.out.println("第一个种子为50的Random对象"); System.out.println("r1.nextBoolean():\t" + r1.nextBoolean()); System.out.println("r1.nextInt():\t\t" + r1.nextInt()); System.out.println("r1.nextDouble():\t" + r1.nextDouble()); System.out.println("r1.nextGaussian():\t" + r1.nextGaussian()); System.out.println("---------------------------"); Random r2 = new Random(50); System.out.println("第二个种子为50的Random对象"); System.out.println("r2.nextBoolean():\t" + r2.nextBoolean()); System.out.println("r2.nextInt():\t\t" + r2.nextInt()); System.out.println("r2.nextDouble():\t" + r2.nextDouble()); System.out.println("r2.nextGaussian():\t" + r2.nextGaussian()); System.out.println("---------------------------"); Random r3 = new Random(100); System.out.println("种子为100的Random对象"); System.out.println("r3.nextBoolean():\t" + r3.nextBoolean()); System.out.println("r3.nextInt():\t\t" + r3.nextInt()); System.out.println("r3.nextDouble():\t" + r3.nextDouble()); System.out.println("r3.nextGaussian():\t" + r3.nextGaussian()); Random r4 = new Random(System.currentTimeMillis()/*取得当前的时间*/); System.out.println("以当前时间为种子的Random对象"); System.out.println("r3.nextBoolean():\t" + r4.nextBoolean()); System.out.println("r3.nextInt():\t\t" + r4.nextInt()); System.out.println("r3.nextDouble():\t" + r4.nextDouble()); System.out.println("r3.nextGaussian():\t" + r4.nextGaussian()); } }
种子会对生成的随机数产生影响,种子相同产生的随机数也相同。
当进行随机时可以将当前的时间作为随机数的种子,这样可以保证种子在不断变化以确保随机数的随机性
import javax.swing.*; import java.util.Random; public class work { public static void main( String args[] ) { //记录每个面的出现次数 int frequency1 = 0, frequency2 = 0, frequency3 = 0, frequency4 = 0, frequency5 = 0, frequency6 = 0, face; // summarize results for ( int roll = 1; roll <= 6000; roll++ ) { //生成1-6的随机数 face = 1 + (int) ( Math.random() * 6 ); switch ( face ) { case 1: ++frequency1; break; case 2: ++frequency2; break; case 3: ++frequency3; break; case 4: ++frequency4; break; case 5: ++frequency5; break; case 6: ++frequency6; break; } } //创建纯文本域并指定行数和列数 JTextArea outputArea = new JTextArea( 7, 10 ); //确定文本域输出的内容 outputArea.setText( "Face\tFrequency" + "\n1\t" + frequency1 + "\n2\t" + frequency2 + "\n3\t" + frequency3 + "\n4\t" + frequency4 + "\n5\t" + frequency5 + "\n6\t" + frequency6 ); //创建显示框显示刚创建的文本域 JOptionPane.showMessageDialog( null, outputArea, "Rolling a Die 6000 Times", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } }
用随机数随机骰子投出各个面的次数。
全手写代码实现生成随机数
public class work { static final int N=1000;//生成随机数的个数 static final int Left=0;//生成随机数的左边界 static final int Right=1000;//生成随机数的右边界 //这些数随便写就行,后面的L表示是long类型 static long x0=1L; static long a =1234567890L; static long c=12345L; static long m=123456L; //生成随机数 public static long rand(long r){ r=(r*a+c)%m;//xn+1=(xn*a+c)mod m; return r; } //用来确保生成的随机数在规定的范围内 public static long little(int L,int R,long r){ r=L+r%(R-L+1); return r; } public static void recursion(int count,long rand){ if(count>N) return; //确保每次生成的数不同 rand=rand(rand); long r=little(Left,Right,rand); System.out.print(count+"、"+r+" "); if(count%10==0){ System.out.println(); } recursion(++count,rand); } public static void main(String[] args){ recursion(1,x0); } }
能生成1000个0到1000的随机数太大了就只截取了一部分。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三、可变参数
可变参数只能出现在方法参数的最后
在方法体中可以用数组的方法访问可变参数
public class work { public static double max(double...values) { double largest=Double.MIN_VALUE/*4.9e-324*/; //增强for循环相当于自动遍历了 for (double v:values) if(v>largest) largest=v; return largest; } public static void main(String args[]) { System.out.println("Max:"+max(1,11,300,2,3)); } }
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
四、重载
电脑可以对方法进行一定程度的识别,传参不同的两个同名函数,电脑可以根据传参的个数和类型自动去调用正确的函数
参数类型的顺序不同也可以比如先INT后FLOAT和先FLOAT后INT也是可以识别的
public class work { public static void main(String[] args) { System.out.println("The square of integer 7 is " + square(7)); System.out.println("\nThe square of double 7.5 is " + square(7.5)); } public static int square(int x) { return x * x; } public static double square(double y) { return y * y; } }
------------------------------------------------------------------------------------------------------------------------------------------------------
五、递归
自己调用自己,注意不要形成死循环,要设置停止的条件
import java.math.BigInteger; import java.util.Scanner; public class work { public static void main(String[] args) { System.out.print("请输入N:"); Scanner scanner=new Scanner(System.in); int number=scanner.nextInt(); System.out.println(number+"!="+calculateN2(number)); } //递归实现求n的阶乘 public static long calculateN(int n) { if(n==1 || n==0){ return 1; } return n*calculateN(n-1); } //BigInteger类也是整数,但是它的范围远大于int和long,可用于更大的整形的定义 public static BigInteger calculateN2(int n) { if(n==1 || n==0){ return BigInteger.valueOf(1); } //multiply用于计算两个BigInteger类的乘法 return BigInteger.valueOf(n).multiply(calculateN2((n-1))); } }
两个浮点数之间的比较
如果要比较两个浮点数是否相等首先要比较他们差的绝对值知否在许可范围之内
标签:9.22,System,static,println,public,Math,out From: https://www.cnblogs.com/xuxingkai/p/17722443.html