滚雪球学Java(54):从零开始学习Java中的Math类,轻松解决数学难题

简介: 【6月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

在这里插入图片描述

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

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

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

@[toc]

前言

  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类中的函数都是静态方法,调用方便,无需实例化对象。

    缺点:

  5. Math类提供的数学函数都是静态方法,无法进行一些特定的运算,如极角运算等。

  6. Math类中提供的函数可能无法满足所有的数学计算需求,需要自己编写特定的算法。
  7. 由于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. 计算圆的面积和周长,具体实现代码参考如下:

    代码实现

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其中的一个数字,具体实现代码参考如下:

    代码实现

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),具体实现代码参考如下:

    代码实现

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()

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()

public static double floor(double a)
public static float floor(float a)

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

ceil()

public static double ceil(double a)
public static float ceil(float a)

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

round()

public static long round(double a)
public static int round(float a)

返回参数的四舍五入值。

max()

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()

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()

public static double random()

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

sin()

public static double sin(double a)

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

cos()

public static double cos(double a)

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

tan()

public static double tan(double a)

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

atan()

public static double atan(double a)

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

测试用例

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

计算绝对值

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

    输入:-5
    期望输出:5

代码实现:

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

实际测试结果:

在这里插入图片描述

计算两个数的最大值

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

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

代码实现:

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

实际测试结果:

在这里插入图片描述

计算两个数的最小值

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

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

代码实现:

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

实际测试结果:

在这里插入图片描述

向上取整

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

    输入:3.4
    期望输出:4.0

代码实现:

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

实际测试结果:

在这里插入图片描述

向下取整

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

    输入:7.5
    期望输出:7.0

代码实现:

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

实际测试结果:

在这里插入图片描述
如上测试方法只需要定义一个main函数直接调用即可,代码定义如下:

    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类,对其进行灵活的应用,提高代码的效率和质量。

☀️建议/推荐你


  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。


目录
相关文章
|
3天前
|
Java 开发者
为什么 Java 的类和对象如此重要?看完这篇你就懂了!
【6月更文挑战第15天】在Java中,类和对象是核心概念。类作为蓝图定义数据(如角色的名称和健康值)和行为(如`takeDamage`方法),而对象是类的实例,允许交互(如战士受伤)。通过继承,如`Circle`和`Rectangle`扩展`Shape`类,实现多态性,增强代码灵活性。类和对象促进代码组织、复用和可维护性,是高效软件开发的基础。
|
1天前
|
Java
在 Java 中,类是一种定义对象的模板,它包含数据成员(字段)和方法。
在 Java 中,类是一种定义对象的模板,它包含数据成员(字段)和方法。
|
1天前
|
Java
【Java】Object类简单解析
【Java】Object类简单解析
4 1
|
1天前
|
Java 测试技术 C++
滚雪球学Java(63):Java高级集合之TreeSet:什么是它,为什么使用它?
【6月更文挑战第17天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
8 0
滚雪球学Java(63):Java高级集合之TreeSet:什么是它,为什么使用它?
|
2天前
|
存储 缓存 算法
滚雪球学Java(62):HashSet的底层实现原理解析
【6月更文挑战第16天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
11 3
滚雪球学Java(62):HashSet的底层实现原理解析
|
3天前
|
Java 开发者
Java 面向对象编程实战:从类定义到对象应用,让你成为高手!
【6月更文挑战第15天】在Java中,掌握面向对象编程至关重要。通过创建`Book`类,展示了属性如`title`和`author`,以及构造方法和getter方法。实例化对象如`book1`和`book2`,并访问其属性。进一步扩展类,添加`pages`和`calculateReadingTime`方法,显示了类的可扩展性。在更大规模的项目中,如电商系统,可以定义`Product`、`User`和`Order`类,利用对象表示实体和它们的交互。实践是精通Java OOP的关键,不断学习和应用以提升技能。
|
3天前
|
设计模式 Java
一文掌握 Java 面向对象精髓:从类定义到对象实战
【6月更文挑战第15天】Java面向对象编程初学者指南:类是对象模板,如`Person`类含`name`和`age`属性。创建对象用`new`,如`Person person = new Person()`。访问属性如`person.name="Alice"`,调用方法如`person.sayHello()`。类能继承,如`Student extends Person`。对象间共享数据可传参或共用引用。多态性允许父类引用调用子类方法。注意对象生命周期和内存管理,避免内存泄漏。通过实践和理解这些基础,提升编程技能。
|
3天前
|
Java
深入 Java 面向对象:类的定义,竟然藏着这么多门道!
【6月更文挑战第15天】Java中的类定义是OOP的基础,它封装属性(如Student的name和age)和行为(如study())。简单的类仅触及表面,而复杂的类可模拟真实世界对象的多样性和交互。类还可通过继承扩展,如Student从Person派生,增加特有属性和行为。接口和抽象类等概念进一步增强了灵活性和可扩展性。类定义的深度和广度是构建高效、可维护代码的关键。
|
21天前
|
Java 程序员
Java中的多线程编程:理解并应用Thread类和Runnable接口
【5月更文挑战第28天】在Java中,多线程编程是一个重要的概念,它允许同时执行多个任务。本文将深入探讨Java的多线程编程,包括Thread类和Runnable接口的使用,以及如何在实际项目中应用这些知识。我们将通过实例来理解这些概念,并讨论多线程编程的优点和可能的挑战。
|
25天前
|
Java
java面试基础 -- 普通类 & 抽象类 & 接口
java面试基础 -- 普通类 & 抽象类 & 接口
27 0