从零开始学习Java中的Math类,轻松解决数学难题

咦咦咦,各位小可爱,我是你们的好伙伴------bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

js 复制代码
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

Java中的Math类是一个非常重要的类,它包含了大量数学计算的方法,可以解决我们在开发过程中遇到的各种数学问题。例如计算三角函数、指数函数、对数函数、绝对值、四舍五入、向上取整、向下取整、随机数、最大值、最小值等。

本文将带领读者从零开始学习Java中的Math类,介绍其常用方法,为读者解决数学难题提供帮助。

摘要

本文将主要包含以下内容:

  1. Java中Math类的概述和常用方法介绍
  2. Math类的应用场景案例
  3. Math类的优缺点分析
  4. Math类的类代码方法介绍
  5. Math类的测试用例
  6. 全文小结和总结

Math类

概述

Math类是Java中的一个内置类,它提供了许多数学运算的方法,例如三角函数、对数函数、指数函数、取整函数、最大、最小值等等。这些方法都是静态方法,可以直接通过类名调用,无需实例化Math类。

Math类中的方法返回的结果都是基本类型的值,除了随机数生成方法返回的是double类型的值。由于Math类中的方法都是静态方法,因此不需要创建Math对象即可使用它的方法。

Math类中的常量PIE分别表示圆周率π和自然对数的底数e。可以通过Math.PIMath.E来获取这两个常量的值。

优缺点分析

如下是对Math类的优缺点进行理性分析,个人观点,仅供参考:

优点:

  1. Math类是Java原生库中的一部分,不需要额外的安装或配置,可以直接使用。
  2. Math类提供了很多数学函数,包括三角函数、指数函数、对数函数、幂函数等等,可以满足大多数的数学计算需求。
  3. Math类中的函数具有高精度,可以处理大部分数值计算问题。
  4. Math类中的函数都是静态方法,调用方便,无需实例化对象。

缺点:

  1. Math类提供的数学函数都是静态方法,无法进行一些特定的运算,如极角运算等。
  2. Math类中提供的函数可能无法满足所有的数学计算需求,需要自己编写特定的算法。
  3. 由于Math类中的方法都是静态方法,如果需要进行大量的数学计算操作,会产生很多临时对象,导致内存开销增加,性能较慢。

总的来说,Math类提供了一些基本的数学函数,可以满足一般的数学计算需求,但是对于一些特殊的数学运算和性能要求较高的应用场景,可能需要自己编写算法或寻找其他的数学库来完成。

源代码解析

Java中的Math类是一个内置的数学库,提供了许多静态方法用于执行常见的数学运算,意味着我们在使用Math类的时候,不需要创建对象,直接使用类名调用即可。

而Java中的Math类有很多常用的方法,常见的方法包括:

  1. abs():返回参数的绝对值,参数可以是int、long、float或double类型。
  2. floor():返回小于或等于参数的最大值的整数,参数可以是float或double类型。
  3. ceil():返回大于或等于参数的最小值的整数,参数可以是float或double类型。
  4. round():返回参数的四舍五入值,参数可以是float或double类型。
  5. max():返回两个参数中的最大值,参数可以是任意类型,但是必须是可比较的。
  6. min():返回两个参数中的最小值,参数可以是任意类型,但是必须是可比较的。
  7. random():返回一个0到1之间的随机数。
  8. sin():返回参数的正弦值,参数必须是double类型。
  9. cos():返回参数的余弦值,参数必须是double类型。
  10. tan():返回参数的正切值,参数必须是double类型。
  11. atan():返回参数的反正切值,参数必须是double类型。

应用场景案例

案例1(计算圆面积和周长)

  1. 计算圆的面积和周长,具体实现代码参考如下:

代码实现

java 复制代码
package com.demo.javase.day54;

/**
 * 案例1(计算圆面积和周长)
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/10/18 17:02
 */
public class Circle {
    private double r;

    public Circle(double r) {
        this.r = r;
    }

    //计算圆面积(公式:PI*r^2)
    public double getArea() {
        return Math.PI * Math.pow(r, 2);
    }

    //计算圆周长(公式:2*PI*r)
    public double getPerimeter() {
        return 2 * Math.PI * r;
    }

    public static void main(String[] args) {
        Circle circle = new Circle(3);
        double area = circle.getArea();
        double perimeter = circle.getPerimeter();
        System.out.println("圆的面积为:" + area);
        System.out.println("圆的周长为:" + perimeter);
    }
}

测试结果

模拟测试结果如下:

代码解析

如上案例代码它包含一个私有的半径r,一个构造方法和两个用于计算圆面积和周长的公有方法getArea()和getPerimeter(),以及一个main方法进行测试。

在构造方法中,使用this关键字将传入的参数r赋值给成员变量this.r。

在getArea()方法中,使用Math.PI获取圆周率,使用Math.pow(r, 2)求半径的平方,并按照公式计算出圆的面积。

在getPerimeter()方法中,同样使用Math.PI获取圆周率,按照公式计算出圆的周长。

在main方法中,首先创建一个Circle对象,其中传入半径为3。然后调用对象的getArea()和getPerimeter()方法,将结果分别赋值给变量area和perimeter,并使用System.out.println()方法输出圆的面积和周长的值。

案例2(实现骰子游戏)

  1. 实现一个骰子游戏,每次随机掷出1~6其中的一个数字,具体实现代码参考如下:

代码实现

java 复制代码
package com.demo.javase.day54;

import java.util.Random;

/**
 * 案例2(实现骰子游戏)
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/10/18 17:07
 */
public class DiceGame {
    
    public static void main(String[] args) {
        Random random = new Random();
        int result = random.nextInt(6) + 1;
        System.out.println("骰子点数为:" + result);
    }
}

测试结果

模拟测试结果如下:

再次执行随机获取一次骰子数:

代码解析

本案例主要使用了Java中的Random类来模拟骰子游戏。首先创建一个Random对象,然后调用nextInt方法生成一个随机数(范围为0-5),再将其加1就能得到1~6的骰子点数,最后输出即可。

案例3(计算人体重指数)

  1. 计算一个人的体重指数(BMI),具体实现代码参考如下:

代码实现

java 复制代码
package com.demo.javase.day54;

/**
 * 案例3(计算人体重指数)
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/10/18 17:12
 */
public class BMI {

    private double height;
    private double weight;

    public BMI(double height, double weight) {
        this.height = height;
        this.weight = weight;
    }

    //BMI体质指数的计算公式:体重(公斤)除以身高(米)的平方。
    public double getBMI() {
        return weight / Math.pow(height, 2);
    }

    public static void main(String[] args) {
        BMI bmi = new BMI(1.72,68);
        double bmi1 = bmi.getBMI();
        System.out.println("BMI:"+bmi1);
    }

}

测试结果

模拟测试结果如下:

科普:

根据世界卫生组织的定义,BMI(Body Mass Index,身体质量指数)是一个用于判断肥胖程度的指标,可以根据身高和体重计算得出,公式为:BMI = 体重(kg)/ 身高(m)的平方。

根据BMI指数,人的肥胖程度可以被分为以下几个等级:

  • BMI小于18.5:体重偏轻;
  • BMI在18.5至24.9之间:正常体重;
  • BMI在25至29.9之间:超重;
  • BMI在30至34.9之间:肥胖(一级);
  • BMI在35至39.9之间:肥胖(二级);
  • BMI大于等于40:肥胖(三级或极度肥胖)。

需要注意的是,BMI只是一个参考指标,对于身体构成、肌肉量等因素的影响并不充分考虑,因此并不能完全代表身体的健康状况,仅供参考。

所以,屏幕前的你,赶紧用此程序给自己计算一下吧,你的肥胖程度为多少呢?是正常体重还是超重啊!

代码解析

本程序实现了计算人体重指数的功能,其核心是计算体重指数的公式:体重(公斤)除以身高(米)的平方。

在程序中,首先定义了一个BMI类,并在该类中定义了两个成员变量:身高和体重,并通过构造方法传入身高和体重的值。

在getBMI()方法中,使用了Math.pow()方法来计算身高的平方,并将体重除以身高的平方,得到体重指数的值,并返回该值。

在main()方法中,先创建一个BMI对象,然后使用该对象的getBMI()方法获取体重指数的值,并将其打印出来。

类代码方法介绍

abs()

java 复制代码
public static int abs(int a)
public static long abs(long a)
public static float abs(float a)
public static double abs(double a)

返回参数的绝对值。

floor()

java 复制代码
public static double floor(double a)
public static float floor(float a)

返回小于或等于参数的最大值的整数。

ceil()

java 复制代码
public static double ceil(double a)
public static float ceil(float a)

返回大于或等于参数的最小值的整数。

round()

java 复制代码
public static long round(double a)
public static int round(float a)

返回参数的四舍五入值。

max()

java 复制代码
public static int max(int a, int b)
public static long max(long a, long b)
public static float max(float a, float b)
public static double max(double a, double b)
public static T max(T a, T b)

返回两个参数中的最大值,参数可以是任意类型,但是必须是可比较的。

min()

java 复制代码
public static int min(int a, int b)
public static long min(long a, long b)
public static float min(float a, float b)
public static double min(double a, double b)
public static T min(T a, T b)

返回两个参数中的最小值,参数可以是任意类型,但是必须是可比较的。

random()

java 复制代码
public static double random()

返回一个0到1之间的随机数。

sin()

java 复制代码
public static double sin(double a)

返回参数的正弦值,参数必须是double类型。

cos()

java 复制代码
public static double cos(double a)

返回参数的余弦值,参数必须是double类型。

tan()

java 复制代码
public static double tan(double a)

返回参数的正切值,参数必须是double类型。

atan()

java 复制代码
public static double atan(double a)

返回参数的反正切值,参数必须是double类型。

测试用例

如下是针对Math类的常用方法进行的一些测试,以便更好的帮助同学们掌握并深入。

计算绝对值

  1. 测试Math类中的abs()方法是否能正确地计算绝对值。

输入:-5 期望输出:5

代码实现:

java 复制代码
    //计算绝对值
    public static void testAbs() {
        int abs = Math.abs(-5);
        System.out.println("-5的绝对值为:" + abs);
    }

实际测试结果:

计算两个数的最大值

  1. 测试Math类中的max()方法是否能正确地计算两个数的最大值。

输入:4, 5 期望输出:5

代码实现:

java 复制代码
    //计算两个数的最大值
    public static void testMax() {
        int max = Math.max(4, 5);
        System.out.println("4与5谁更大:" + max);
    }

实际测试结果:

计算两个数的最小值

  1. 测试Math类中的min()方法是否能正确地计算两个数的最小值。

输入:-3, 7 期望输出:-3

代码实现:

java 复制代码
    //计算两个数的最小值
    public static void testMin() {
        int min = Math.min(-3, 7);
        System.out.println("-3与7谁更小:" + min);
    }

实际测试结果:

向上取整

  1. 测试Math类中的ceil()方法是否能正确地进行向上取整。

输入:3.4 期望输出:4.0

代码实现:

java 复制代码
    //向上取整
    public static void testCeil() {
        double ceil = Math.ceil(3.4);
        System.out.println("3.4向上取整为:" + ceil);
    }

实际测试结果:

向下取整

  1. 测试Math类中的floor()方法是否能正确地进行向下取整。

输入:7.5 期望输出:7.0

代码实现:

java 复制代码
    //向下取整
    public static void testFloor() {
        double floor = Math.floor(7.5);
        System.out.println("7.5向下取整为:" + floor);
    }

实际测试结果:

如上测试方法只需要定义一个main函数直接调用即可,代码定义如下:

java 复制代码
    public static void main(String[] args) {
        testAbs();
        testMax();
        testMin();
        testCeil();
        testFloor();
    }

小结

Math类是Java中的一个常用工具类,提供了一些常用的数学方法,方便开发者在代码中调用,减少了自己实现这些方法的复杂度。在本次测试中,我们使用了一些常用的Math类方法进行了测试,包括计算绝对值、计算两个数的最大值和最小值、向上取整和向下取整。通过测试,我们发现这些方法都能够正确地计算出预期的结果,且使用简单,能够大大提高开发效率。

因此,在实际编程中,我们可以充分利用Math类提供的这些方法,帮助我们更好地完成项目。

附录源码

如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

总结

本文介绍了Java中的Math类,讲解了Math类的概述和常用方法,包括计算绝对值、向上取整和向下取整、计算两个数的最大值和最小值、生成随机数、求三角函数和反三角函数等。同时,文章还介绍了Math类的应用场景案例,如计算圆面积和周长、实现骰子游戏、计算人体重指数等,帮助读者更好地理解Math类在实际编程中的应用。

在讲解Math类的优缺点时,本文指出了Math类提供的方法无法进行一些特定的运算,可能无法满足所有的数学计算需求,需要自己编写特定的算法。同时,在Math类中提供的函数都是静态方法,如果需要进行大量的数学计算操作,会产生很多临时对象,导致内存开销增加,性能较慢。

最后,本文还给出了对Math类常用方法的测试用例,帮助读者更好地掌握这些方法的使用。通过本文的学习,读者可以更好地理解和掌握Java中的Math类,对其进行灵活的应用,提高代码的效率和质量。

☀️建议/推荐你

最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我

我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


相关推荐
m0_74825488几秒前
Spring Boot实现多数据源连接和切换
spring boot·后端·oracle
吴冰_hogan7 分钟前
Java虚拟机(JVM)的类加载器与双亲委派机制
java·开发语言·jvm
程序员shen1616117 分钟前
注意⚠️:矩阵系统源码开发/SaaS矩阵系统开源/抖音矩阵开发优势和方向
java·大数据·数据库·python·php
青春男大30 分钟前
java队列--数据结构
java·开发语言·数据结构·学习·eclipse
yzhSWJ1 小时前
mybatisplu设置自动填充
java·spring·tomcat
Java雪荷1 小时前
基于 Vant UI + Redisson BitSet 实现签到日历
java·redis·vue
18号房客1 小时前
云原生后端开发(一)
后端·云原生
白宇横流学长1 小时前
基于Javaee的影视创作论坛的设计与实现【源码+文档+部署讲解】
java·java-ee
南宫生1 小时前
力扣-数据结构-4【算法学习day.75】
java·数据结构·学习·算法·leetcode
TANGLONG2222 小时前
【初阶数据结构与算法】八大排序算法之归并排序与非比较排序(计数排序)
java·数据结构·c++·算法·面试·蓝桥杯·排序算法