從零開始學習 Java:簡單易懂的入門指南之MAth、System(十二)

常見API,MAth、System

  • 1 Math類
    • 1.1 概述
    • 1.2 常見方法
    • 1.3 算法小題(質數)
    • 1.4 算法小題(自冪數)
  • 2 System類
    • 2.1 概述
    • 2.2 常見方法

1 Math類

1.1 概述

tips:了解內容

查看API文檔,我們可以看到API文檔中關于Math類的定義如下:

在這里插入圖片描述

Math類所在包為java.lang包,因此在使用的時候不需要進行導包。并且Math類被final修飾了,因此該類是不能被繼承的。

Math類包含執行基本數字運算的方法,我們可以使用Math類完成基本的數學運算。

要想使用Math類我們就需要先創建該類的對象,那么創建對象就需要借助于構造方法。因此我們就需要首先查看一下API文檔,看看API文檔中針對Math類有沒有提供對應的構造方法。通過API文檔來查看

一下Math類的成員,如下所示:

在這里插入圖片描述

在API文檔中沒有體現可用的構造方法,因此我們就不能直接通過new關鍵字去創建Math類的對象。同時我們發現Math類中的方法都是靜態的,因此在使用的時候我們可以直接通過類名去調用。在Math類中

定義了很多數學運算的方法,但是我們并不可能將所有的方法學習一遍,我們主要學習的就是一些常見的方法。

1.2 常見方法

tips:重點講解內容

常見方法介紹

我們要學習的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)				// 按照四舍五入返回最接近參數的int類型的值
public static int max(int a,int b)				// 獲取兩個int值中的較大值
public static int min(int a,int b)				// 獲取兩個int值中的較小值
public static double pow (double a,double b)	// 計算a的b次冪的值
public static double random()					// 返回一個[0.0,1.0)的隨機值

案例演示

接下來我們就來演示一些這些方法的執行效果,如下所示:

public class MathDemo01 {public static void main(String[] args) {// public static int abs(int a)         返回參數的絕對值System.out.println("-2的絕對值為:" + Math.abs(-2));System.out.println("2的絕對值為:" + Math.abs(2));// public static double ceil(double a)  返回大于或等于參數的最小整數System.out.println("大于或等于23.45的最小整數位:" + Math.ceil(23.45));System.out.println("大于或等于-23.45的最小整數位:" + Math.ceil(-23.45));// public static double floor(double a) 返回小于或等于參數的最大整數System.out.println("小于或等于23.45的最大整數位:" + Math.floor(23.45));System.out.println("小于或等于-23.45的最大整數位:" + Math.floor(-23.45));// public static int round(float a)     按照四舍五入返回最接近參數的intSystem.out.println("23.45四舍五入的結果為:" + Math.round(23.45));System.out.println("23.55四舍五入的結果為:" + Math.round(23.55));// public static int max(int a,int b)   返回兩個int值中的較大值System.out.println("23和45的最大值為: " + Math.max(23, 45));// public static int min(int a,int b)   返回兩個int值中的較小值System.out.println("12和34的最小值為: " + Math.min(12 , 34));// public static double pow (double a,double b)返回a的b次冪的值System.out.println("2的3次冪計算結果為: " + Math.pow(2,3));// public static double random()返回值為double的正值,[0.0,1.0)System.out.println("獲取到的0-1之間的隨機數為: " + Math.random());}}

運行程序進行測試,控制臺輸出結果如下:

-2的絕對值為:2
2的絕對值為:2
大于或等于23.45的最小整數位:24.0
大于或等于-23.45的最小整數位:-23.0
小于或等于23.45的最大整數位:23.0
小于或等于-23.45的最大整數位:-24.0
23.45四舍五入的結果為:23
23.55四舍五入的結果為:24
2345的最大值為: 45
1234的最小值為: 12
23次冪計算結果為: 8.0
獲取到的0-1之間的隨機數為: 0.7322484131745958

1.3 算法小題(質數)

需求:

? 判斷一個數是否為一個質數

代碼實現:

public class MathDemo2 {public static void main(String[] args) {//判斷一個數是否為一個質數System.out.println(isPrime(997));//997 2~996 995次}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;}
}

1.4 算法小題(自冪數)

自冪數,一個n位自然數等于自身各個數位上數字的n次冪之和

? 舉例1:三位數 1^3 + 5^3 + 3^3 = 153

? 舉例2:四位數 1^4 + 6^4 + 3^4 + 4^3 = 1634

如果自冪數是:

  • 一位自冪數,也叫做:獨身數
  • 三位自冪數:水仙花數 四位自冪數:四葉玫瑰數
  • 五位自冪數:五角星數 六位自冪數:六合數
  • 七位自冪數:北斗七星數 八位自冪數:八仙數
  • 九位自冪數:九九重陽數 十位自冪數:十全十美數
//水仙花數:100 ~ 999
int count = 0;
//得到每一個三位數
for (int i = 100; i <= 999; i++) {//個位 十位 百位int ge = i % 10;int shi = i / 10 % 10;int bai = i / 100 % 10;//判斷://每一位的三次方之和 跟本身 進行比較。double sum = Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3);if (sum == i) {count++;//System.out.println(i);System.out.println(count);}
}

2 System類

2.1 概述

tips:了解內容

查看API文檔,我們可以看到API文檔中關于System類的定義如下:

System類所在包為java.lang包,因此在使用的時候不需要進行導包。并且System類被final修飾了,因此該類是不能被繼承的。

System包含了系統操作的一些常用的方法。比如獲取當前時間所對應的毫秒值,再比如終止當前JVM等等。

要想使用System類我們就需要先創建該類的對象,那么創建對象就需要借助于構造方法。因此我們就需要首先查看一下API文檔,看看API文檔中針對System類有沒有提供對應的構造方法。通過API文檔來

查看一下System類的成員,如下所示:
在這里插入圖片描述

在API文檔中沒有體現可用的構造方法,因此我們就不能直接通過new關鍵字去創建System類的對象。同時我們發現System類中的方法都是靜態的,因此在使用的時候我們可以直接通過類名去調用(Nested Class Summary內部類或者內部接口的描述)。

2.2 常見方法

tips:重點內容

常見方法介紹

我們要學習的System類中的常見方法如下所示:

public static long currentTimeMillis()			// 獲取當前時間所對應的毫秒值(當前時間為0時區所對應的時間即就是英國格林尼治天文臺舊址所在位置)
public static void exit(int status)				// 終止當前正在運行的Java虛擬機,0表示正常退出,非零表示異常退出
public static native void arraycopy(Object src,  int  srcPos, Object dest, int destPos, int length); // 進行數值元素copy

案例演示

接下來我們就來通過一些案例演示一下這些方法的特點。

案例1:演示currentTimeMillis方法

public class SystemDemo01 {public static void main(String[] args) {// 獲取當前時間所對應的毫秒值long millis = System.currentTimeMillis();// 輸出結果System.out.println("當前時間所對應的毫秒值為:" + millis);}}

運行程序進行測試,控制臺的輸出結果如下:

當前時間所對應的毫秒值為:1876050298313

獲取到當前時間的毫秒值的意義:我們常常來需要統計某一段代碼的執行時間。此時我們就可以在執行這段代碼之前獲取一次時間,在執行完畢以后再次獲取一次系統時間,然后計算兩個時間的差值,

這個差值就是這段代碼執行完畢以后所需要的時間。如下代碼所示:

public class SystemDemo2 {public static void main(String[] args) {//判斷1~100000之間有多少個質數long start = System.currentTimeMillis();for (int i = 1; i <= 100000; i++) {boolean flag = isPrime2(i);if (flag) {System.out.println(i);}}long end = System.currentTimeMillis();//獲取程序運行的總時間System.out.println(end - start); //方式一:1514 毫秒  方式二:71毫秒}//以前判斷是否為質數的方式public static boolean isPrime1(int number) {for (int i = 2; i < number; i++) {if (number % i == 0) {return false;}}return true;}//改進之后判斷是否為質數的方式(效率高)public static boolean isPrime2(int number) {for (int i = 2; i <= Math.sqrt(number); i++) {if (number % i == 0) {return false;}}return true;}
}

案例2:演示exit方法

public class SystemDemo01 {public static void main(String[] args) {// 輸出System.out.println("程序開始執行了.....");// 終止JVMSystem.exit(0);// 輸出System.out.println("程序終止了..........");}}

運行程序進行測試,控制臺輸出結果如下:

程序開始執行了.....

此時可以看到在控制臺只輸出了"程序開始了…",由于JVM終止了,因此輸出"程序終止了…"這段代碼沒有被執行。

案例3:演示arraycopy方法

方法參數說明:

// src: 	 源數組
// srcPos:  源數值的開始位置
// dest:    目標數組
// destPos: 目標數組開始位置
// length:   要復制的元素個數
public static native void arraycopy(Object src,  int  srcPos, Object dest, int destPos, int length); 

代碼如下所示:

public class SystemDemo01 {public static void main(String[] args) {// 定義源數組int[] srcArray = {23 , 45 , 67 , 89 , 14 , 56 } ;// 定義目標數組int[] desArray = new int[10] ;// 進行數組元素的copy: 把srcArray數組中從0索引開始的3個元素,從desArray數組中的1索引開始復制過去System.arraycopy(srcArray , 0 , desArray , 1 , 3);// 遍歷目標數組for(int x = 0 ; x < desArray.length ; x++) {if(x != desArray.length - 1) {System.out.print(desArray[x] + ", ");}else {System.out.println(desArray[x]);}}}}

運行程序進行測試,控制臺輸出結果如下所示:

0, 23, 45, 67, 0, 0, 0, 0, 0, 0

通過控制臺輸出結果我們可以看到,數組元素的確進行復制了。

使用這個方法我們也可以完成數組元素的刪除操作,如下所示:

public class SystemDemo02 {public static void main(String[] args) {// 定義一個數組int[] srcArray = {23 , 45 , 67 , 89 , 14 , 56 } ;// 刪除數組中第3個元素(67):要刪除67這個元素,我們只需要將67后面的其他元素依次向前進行移動即可System.arraycopy(srcArray , 3 , srcArray , 2 , 3);// 遍歷srcArray數組for(int x = 0 ; x < srcArray.length ; x++) {if(x != desArray.length - 1) {System.out.print(srcArray[x] + ", ");}else {System.out.println(srcArray[x]);}}}
}

運行程序進行測試,控制臺的輸出結果如下所示:

23, 45, 89, 14, 56, 56 

通過控制臺輸出結果我們可以看到此時多出了一個56元素,此時我們只需要將最后一個位置設置為0即可。如下所示:

public class SystemDemo02 {public static void main(String[] args) {// 定義一個數組int[] srcArray = {23 , 45 , 67 , 89 , 14 , 56 } ;// 刪除數組中第3個元素(67):要刪除67這個元素,我們只需要將67后面的其他元素依次向前進行移動即可System.arraycopy(srcArray , 3 , srcArray , 2 , 3);// 將最后一個位置的元素設置為0srcArray[srcArray.length - 1] = 0 ;// 遍歷srcArray數組for(int x = 0 ; x < srcArray.length ; x++) {if(x != srcArray.length - 1 ) {System.out.print(srcArray[x] + ", ");}else {System.out.println(srcArray[x]);}}}
}

運行程序進行測試,控制臺輸出結果如下所示:

23, 45, 89, 14, 56, 0

此時我們可以看到元素"67"已經被刪除掉了。67后面的其他元素依次向前進行移動了一位。

arraycopy方法底層細節:

1.如果數據源數組和目的地數組都是基本數據類型,那么兩者的類型必須保持一致,否則會報錯

2.在拷貝的時候需要考慮數組的長度,如果超出范圍也會報錯

3.如果數據源數組和目的地數組都是引用數據類型,那么子類類型可以賦值給父類類型

代碼示例:

public class SystemDemo3 {public static void main(String[] args) {//public static void arraycopy(數據源數組,起始索引,目的地數組,起始索引,拷貝個數) 數組拷貝//細節://1.如果數據源數組和目的地數組都是基本數據類型,那么兩者的類型必須保持一致,否則會報錯//2.在拷貝的時候需要考慮數組的長度,如果超出范圍也會報錯//3.如果數據源數組和目的地數組都是引用數據類型,那么子類類型可以賦值給父類類型Student s1 = new Student("zhangsan", 23);Student s2 = new Student("lisi", 24);Student s3 = new Student("wangwu", 25);Student[] arr1 = {s1, s2, s3};Person[] arr2 = new Person[3];//把arr1中對象的地址值賦值給arr2中System.arraycopy(arr1, 0, arr2, 0, 3);//遍歷數組arr2for (int i = 0; i < arr2.length; i++) {Student stu = (Student) arr2[i];System.out.println(stu.getName() + "," + stu.getAge());}}
}class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}/*** 獲取** @return name*/public String getName() {return name;}/*** 設置** @param name*/public void setName(String name) {this.name = name;}/*** 獲取** @return age*/public int getAge() {return age;}/*** 設置** @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Person{name = " + name + ", age = " + age + "}";}
}class Student extends Person {public Student() {}public Student(String name, int age) {super(name, age);}
}

后記
👉👉💕💕美好的一天,到此結束,下次繼續努力!欲知后續,請看下回分解,寫作不易,感謝大家的支持!! 🌹🌹🌹

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39141.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39141.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39141.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每天一道leetcode:300. 最長遞增子序列(動態規劃中等)

今日份題目&#xff1a; 給你一個整數數組 nums &#xff0c;找到其中最長嚴格遞增子序列的長度。 子序列 是由數組派生而來的序列&#xff0c;刪除&#xff08;或不刪除&#xff09;數組中的元素而不改變其余元素的順序。例如&#xff0c;[3,6,2,7] 是數組 [0,3,1,6,2,2,7] …

【JavaEE進階】SpringBoot項目的創建

文章目錄 一. SpringBoot簡介1. 什么是SpringBoot?2. SpringBoot的優點 二. SpringBoot項目創建1. 使用IDEA創建2. 使用網頁創建SpringBoot項目 三. 運行SpringBoot項目 一. SpringBoot簡介 1. 什么是SpringBoot? Spring Boot 是一個用于快速構建基于 Spring 框架的應用程序…

Spring對象裝配

在spring中&#xff0c;Bean的執行流程為啟動spring容器&#xff0c;實例化bean&#xff0c;將bean注冊到spring容器中&#xff0c;將bean裝配到需要的類中。 既然我們需要將bea裝配到需要的類中&#xff0c;那么如何實現呢&#xff1f;這篇文章&#xff0c;將來闡述一下如何實…

SOFABoot——基本使用(筆記)

文章目錄 一、前言二、快速開始2.1 基本搭建2.2 測試是否成功2.3 其他部分日志測試異步啟動 三、SOFABoot的模塊化開發3.1 基于Spring上下文的隔離3.2 Root Application Context3.3 模塊并行化啟動3.4 JVM服務與RPC服務的發布與引用3.5 模塊配置Module-NameRequire-ModuleSprin…

wsl2安裝mysql環境

安裝完mysql后通過如下命令啟動mysql service mysql start 會顯示如下錯誤&#xff1a; mysql: unrecognized service 實際上上面顯示的錯誤是由于mysql沒有啟動成功造成的 我們要想辦法成功啟動mysql才可以 1.通過如下操作就可以跳過密碼直接進入mysql環境 2.如果想找到my…

微服務與Nacos概述-5

引入OpenFeign 添加依賴&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>com.alibaba.cloud</groupId>…

“記賬”很麻煩,看這場競賽中的隊伍與合合信息是如何解決問題的

在我們日常生活中或多或少都會有記賬的情況&#xff0c;以此來對自己的收支和消費習慣進行分析&#xff0c;來幫助自己減少不必要的開支&#xff0c;優化財務決策、合理分配資金&#xff0c;減少財務壓力和不必要的浪費。 但記賬這個動作本身就是一件比較麻煩的。雖然現階段有…

數據結構入門 — 時間復雜度、空間復雜度

前言 數據結構_空間復雜度_時間復雜度講解_常見復雜度對比 本文介紹數據結構中的時間復雜度和空間復雜度 ***文章末尾&#xff0c;博主進行了概要總結&#xff0c;可以直接看總結部分*** 博主博客鏈接&#xff1a;https://blog.csdn.net/m0_74014525 點點關注&#xff0c;后期…

哈夫曼樹(赫夫曼樹、最優樹)詳解

目錄 哈夫曼樹&#xff08;赫夫曼樹、最優樹&#xff09;詳解 哈夫曼樹相關的幾個名詞 什么是哈夫曼樹 構建哈夫曼樹的過程 哈弗曼樹中結點結構 構建哈弗曼樹的算法實現 哈夫曼樹&#xff08;赫夫曼樹、最優樹&#xff09;詳解 哈夫曼樹相關的幾個名詞 路徑&#xff1a;…

2023牛客暑期多校訓練營8(A/H/I/J)

目錄 A.Alive Fossils H.Insert 1, Insert 2, Insert 3, ... I.Make It Square J.Permutation and Primes A.Alive Fossils 思路&#xff1a;一開始題意看半天沒看懂&#xff0c;后面發現只需要輸出t組輸入中&#xff0c;都出現過的字符串即可。 代碼&#xff1a; void s…

實驗三 圖像分割與描述

一、實驗目的&#xff1a; &#xff08;1&#xff09;進一步掌握圖像處理工具Matlab&#xff0c;熟悉基于Matlab的圖像處理函數。 &#xff08;2&#xff09;掌握圖像分割方法&#xff0c;熟悉常用圖像描述方法。 二、實驗原理 1.膚色檢測 膚色是人類皮膚重要特征之一&#xff…

7.原 型

7.1原型 【例如】 另外- this指向&#xff1a; 構造函數和原型對象中的this都指向實例化的對象 7.2 constructor屬性 每個原型對象里面都有個constructor屬性( constructor構造函數) 作用&#xff1a;該屬性指向該原型對象的構造函數 使用場景: 如果有多個對象的方法&#…

Springboot 實踐(4)swagger-ui 測試controller

前文項目操作&#xff0c;完成了項目的創建、數據源的配置以及數據庫DAO程序的生成與配置。此文講解利用swagger-ui界面&#xff0c;測試生成的數據庫DAO程序。目前&#xff0c;項目swagger-ui界面如下&#xff1a; 以”用戶管理”為例&#xff0c;簡單講述swagger-ui測試數據庫…

無涯教程-Perl - s函數

描述 這不是功能。這是正則表達式替換運算符。根據PATTERN中指定的正則表達式,將數據替換為REPLACE。與m //一樣,分隔符由s后的第一個字符定義。 語法 以下是此函數的簡單語法- s/PATTERN/REPLACE/返回值 如果失敗,此函數返回0,如果成功,則返回替換次數。 例 以下是顯示…

筆記:移植xenomai到nuc972

xenomai是一個實時操作系統,想要使用它,先要移植I-pipe補丁 補丁在xenomai / ipipe-arm GitLab 我的內核是4.4-248的,合并上去會有幾個小錯誤,隨便改改就好 編譯內核沒有報錯之后,接下來需要修改arch/arm/mach-nuc970/time.c 修改方法參考補丁里面其它設備的定時器驅動,就…

學習Vue:數據綁定的基本概念

在 Vue.js 中&#xff0c;Vue 實例是您構建應用程序的核心。它允許您將數據和界面連接起來&#xff0c;實現動態的數據綁定&#xff0c;使您的應用程序能夠根據數據的變化自動更新界面。讓我們來深入了解 Vue 實例與數據綁定的基本概念。 Vue 實例與數據綁定 什么是 Vue 實例&…

OPC【2】——Relationships

引言 Relationships由一系列Relationship構成。將Abstract Package看做是一個圖數據結構&#xff0c;則Relationships是圖數據中的邊集合。 Package Relationships 對于Package Relationships&#xff0c;其所有引用關系的source對象為Abstract Package&#xff0c;或者看…

【Python機器學習】實驗10 支持向量機

文章目錄 支持向量機實例1 線性可分的支持向量機1.1 數據讀取1.2 準備訓練數據1.3 實例化線性支持向量機1.4 可視化分析 實例2 核支持向量機2.1 讀取數據集2.2 定義高斯核函數2.3 創建非線性的支持向量機2.4 可視化樣本類別 實例3 如何選擇最優的C和gamma3.1 讀取數據3.2 利用數…

Open3D 最小二乘擬合平面(SVD分解法)

目錄 一、算法原理二、代碼實現三、結果展示1、點云2、擬合結果四、優秀博客本文由CSDN點云俠原創,原文鏈接。爬蟲網站自重。 一、算法原理 本文實現矩陣奇異值分解方法的最小二乘擬合平面。原理如下: 對于得到的 n n

歐拉函數(質因子分解)

思路&#xff1a; (1)歐拉函數&#xff1a;輸入n則輸出1~n中與n互質的數的個數。 &#xff08;2&#xff09;計算公式&#xff1a; &#xff08;3&#xff09;證明&#xff1a;&#xff08;容斥原理&#xff09;對于n個數&#xff0c;先分別摘除所有被pi整除的數&#xff0c;…