1? 、 函數(shù)
1.1??? ?數(shù)的概述
發(fā)現(xiàn)不斷進(jìn)行加法運(yùn)算,為了提高代碼的復(fù)用性,就把該功能獨(dú)立封裝成一段獨(dú)立的小程序,當(dāng)下次需要執(zhí)行加法運(yùn)算的時(shí)候,就可以直接調(diào)用這個(gè)段小程序即可,那么這種封裝形形式的具體表現(xiàn)形式則稱(chēng)作函數(shù)。
練習(xí):把兩個(gè)整數(shù)相加:
public class FunctionDemo1{ public static void main(String[] args){ /* int a =
4+5; System.out.println("a="+a); int b = 3+9; System.out.println("b="+b); */
add(4,5) } public static int add(int a, int b){ return a+b; } }
舉例:地鐵自動(dòng)售票機(jī),接收紙幣或硬幣,返回車(chē)票,該售票機(jī)具有獨(dú)立功能,可以理解為函數(shù)。有未知內(nèi)容參與運(yùn)算(要投幣,紙幣硬幣,多少錢(qián))。有返回值(返回車(chē)票)
舉例2:手機(jī),手機(jī)具備打電話(huà)功能,有未知內(nèi)容(電話(huà)號(hào)碼),鍵盤(pán)是(形參),輸入的號(hào)碼是實(shí)際參數(shù)。
1.2??? 函數(shù)的格式
修飾符 返回值類(lèi)型 函數(shù)名(參數(shù)類(lèi)型 形式參數(shù)1,參數(shù)類(lèi)型 形式參數(shù)2,…) { 執(zhí)行語(yǔ)句; return 返回值; }
返回值類(lèi)型: 運(yùn)行這段程序得出的一個(gè)運(yùn)算結(jié)果,結(jié)果類(lèi)型,如果函數(shù)沒(méi)有返回值則用void
??????????? 來(lái)表示該函數(shù)沒(méi)有返回值。
函數(shù)名:僅僅是一個(gè)標(biāo)識(shí)符,可以隨意起名字。
形式參數(shù):是一個(gè)變量,用于存儲(chǔ)調(diào)用函數(shù)傳遞進(jìn)來(lái)的實(shí)際參數(shù)。
實(shí)際參數(shù):傳遞給形式參數(shù)的具體數(shù)值。
返回值:返回給調(diào)用者。
?
?
?
定義函數(shù):
?? 1:是否有未知內(nèi)容參與運(yùn)算
?? 2:是否有運(yùn)算結(jié)果(返回值)
案例:獲取2個(gè)整數(shù)中的較大的數(shù)。
???
public static int getMax(int x, int y) { int result; if (x > y) { result= x; }
else { result= y; } return result; }
該方法方法名為:getMax,方法的作用是獲取找出兩個(gè)整數(shù)中較大的值。該方法有兩個(gè)int型參數(shù),:x和y,方法返回兩個(gè)數(shù)中較大的一個(gè)。解析:getMax方法
public static 是方法的修飾符
int 是方法的返回值類(lèi)型
getMax 是方法的方法名
(int x,int y)是參數(shù)列表,x和y是形式參數(shù)。
{} 花括號(hào)內(nèi)的代碼是方法體???????????????????????????????????
return result; result 是返回值。
?
方法定義完成之后,如何調(diào)用一個(gè)方法?
?
函數(shù)調(diào)用:
??? 想要使用方法,必須調(diào)用它。
public static void main(String[] args) { int max = getMax(5, 7);
System.out.println(max); }
完整程序一:在main方法中調(diào)用getMax()方法,5和7就是給該方法傳遞的實(shí)際參數(shù)。如果方法有返回值,可以定義一個(gè)變量接收返回值,變量類(lèi)型和方法返回值類(lèi)型一致。本例中通過(guò)int類(lèi)型變量max接收了getMax方法的返回值。
這里的getMax(i, j); i和j就是實(shí)際參數(shù)。
public class Demo6 { public static void main(String[] args) { int i=5; int
j=7; int max = getMax(i, j); System.out.println(i+"和"+j+"的最大值是:"+max); } public
static int getMax(int x, int y) { int result; if (x > y) { result= x; } else {
result= y; } return result; } }
?
二:上述案例中調(diào)用getMax方法,并將結(jié)果賦值給了max變量。也可以直接打印getMax()方法的結(jié)果。
?
public class Demo6 { public static void main(String[] args) { int i=5; int
j=7; //打印方法的結(jié)果 System.out.println(getMax(i, j)); } public static int getMax(int
x, int y) { int result; if (x > y) { result= x; } else { result= y; } return
result; } }
注意:main方法是程序的入口由虛擬機(jī)調(diào)用,方法和方法之間不能嵌套,方法之間通過(guò)調(diào)用來(lái)使用。
方法什么時(shí)候執(zhí)行完畢:
當(dāng)執(zhí)行完return語(yǔ)句,或者執(zhí)行到方法末尾的花括號(hào)時(shí)方法結(jié)束。
該類(lèi)中包含了兩個(gè)方法,main方法和getMax方法。main方法由java虛擬機(jī)調(diào)用,并且main方法的寫(xiě)法是固定的。Main方法可以調(diào)用其他方法。
當(dāng)調(diào)用getMax方法時(shí),變量i的值傳遞給方法中的x,j的值傳遞給方法中的y,并開(kāi)始執(zhí)行g(shù)etMax方法中的語(yǔ)句,執(zhí)行return,并返回運(yùn)算結(jié)果。getMax方法運(yùn)行完畢。
?
?
?
1.3??? 函數(shù)的特點(diǎn)
1、定義函數(shù)可以將功能代碼進(jìn)行封裝
2、便于對(duì)該功能進(jìn)行復(fù)用
3、函數(shù)只有被調(diào)用才會(huì)被執(zhí)行
4、函數(shù)的出現(xiàn)提高了代碼的復(fù)用性
5、對(duì)于函數(shù)沒(méi)有具體返回值的情況,返回值類(lèi)型用關(guān)鍵字void表示,那么該函數(shù)中的return語(yǔ)句如果在最后一行可以省略不寫(xiě)。
注意:
函數(shù)中只能調(diào)用函數(shù),不可以在函數(shù)內(nèi)部定義函數(shù)。
定義函數(shù)時(shí),函數(shù)的結(jié)果應(yīng)該返回給調(diào)用者,交由調(diào)用者處理。
?
函數(shù)的返回值void
需求:根據(jù)學(xué)生考試成績(jī)劃分ABCD?? A90-100? B80-89 C70-79 D60-69
E0-59,建議成績(jī)使用double。將該程序使用函數(shù)定義。
??
public static void main(String[] args) { printGrade(90); printGrade(59.5); }
public static void printGrade(double score) { char grade; if (score >= 90.0)
System.out.println("A"); else if (score >= 80.0) System.out.println("B"); else
if (score >= 70.0) System.out.println("C"); else if (score >= 60.0)
System.out.println("D"); else System.out.println("E"); }
?
public static void main(String[] args) { getResult(5); } public static int
getResult(int x){ System.out.println(return x*8); //調(diào)用該函數(shù)會(huì)報(bào)錯(cuò).缺少返回值類(lèi)型. } /* *
該方法沒(méi)有具體的返回值,那么返回值的類(lèi)型 是不可以寫(xiě)int 了 * 但是又和函數(shù)的格式不符合了,怎么解決? * 當(dāng)函數(shù)運(yùn)算后,
沒(méi)有具體的返回值時(shí),這時(shí)返回值類(lèi)型用一個(gè)特殊的關(guān)鍵字做標(biāo)志. * 該關(guān)鍵字就是void void 表示沒(méi)有具體的返回值類(lèi)型. * 當(dāng)函數(shù)的返回值類(lèi)型是void
時(shí),函數(shù)中的return語(yǔ)句可以省略不寫(xiě). */
?注意: 函數(shù)中只能調(diào)用函數(shù),不可以在函數(shù)內(nèi)部定義函數(shù)。函數(shù)之間是平級(jí)的,相互之間是調(diào)用的關(guān)系.
錯(cuò)誤寫(xiě)法
??
public static void main(String[] args) { public static void getResult(int x) {
System.out.println(x * 8); // 主函數(shù),里邊嵌套函數(shù)。錯(cuò)誤! } }
1.4??? 函數(shù)的應(yīng)用
案例一:畫(huà)矩形。
/* 為了提高代碼的復(fù)用性 定義一個(gè)畫(huà)矩形的函數(shù) 1、確定函數(shù)的運(yùn)算結(jié)果的數(shù)據(jù)類(lèi)型,void 2、確定沒(méi)有未知參數(shù)。 */ public static
void draw(int width , int height){ for(int i = 0 ; i< height ; i++){ for(int j
= 0 ; j < width ; j++){ System.out.print("*"); } System.out.println(); } }
案例二:兩個(gè)數(shù)字對(duì)比是否相等
??
?
/* 1、確定函數(shù)的運(yùn)算結(jié)果的數(shù)據(jù)類(lèi)型,boolean 2、確定沒(méi)有未知參數(shù)。a,b */ public static boolean
equlas(int a , int b){ /** if(a==b){ return true; }else{ return false; } **/
return a==b?true:false; }
案例三:比較兩個(gè)數(shù)的大小
??
/* 比較兩個(gè)整數(shù)誰(shuí)大. */ public static int max(int a,int b) { /* if(a>b) return a;
else return b; */ return a>b?a:b; }
?
?
函數(shù)的使用注意事項(xiàng):
* 函數(shù)中只能調(diào)用函數(shù),不能定義函數(shù),沒(méi)有定義函數(shù)之前,不能調(diào)用函數(shù)。
* 輸出語(yǔ)句只能對(duì)有具體返回結(jié)果的函數(shù)的進(jìn)行打印。
* 返回值類(lèi)型是void的函數(shù),是不可以被輸出語(yǔ)句打印的。
* 函數(shù)需要實(shí)現(xiàn)功能,那么函數(shù)只實(shí)現(xiàn)所需功能即可,不要實(shí)現(xiàn)不需要的功能。
1.5??? 函數(shù)的重載
1、函數(shù)重載的定義:在同一個(gè)類(lèi)中,有一個(gè)以上的同名函數(shù),只要函數(shù)的參數(shù)列表或參數(shù)類(lèi)型不一樣即可,與返回值無(wú)關(guān), 這些統(tǒng)稱(chēng)為方法的重載。
2、函數(shù)的重載存在的原因:為了增強(qiáng)方法的閱讀性,優(yōu)化了程序設(shè)計(jì)。
案例1:九九乘法表
private static void print99() { for(int i = 1 ; i<= 9 ; i ++){ for(int j = 1 ;
j<=i ; j++){ System.out.print(i+"*"+j+"="+(i*j)+" "); } System.out.println(); }
}
?
?
??
?
練習(xí):判斷那個(gè)方法是重載
?
void show(int w, double c, char b){} void show(int x, char y, double z){} true
void show(int a, double c, char b){} false void show(int a, char b){} true void
show(double c){} true double show(int x, char y, double z){} true
?
2? ?、 數(shù)組
概念
同一種類(lèi)型數(shù)據(jù)的集合。其實(shí)數(shù)組就是一個(gè)容器。
數(shù)組的好處
可以自動(dòng)給數(shù)組中的元素從0開(kāi)始編號(hào),方便操作這些元素。
格式1:
元素類(lèi)型[] 數(shù)組名 = new 元素類(lèi)型[元素個(gè)數(shù)或數(shù)組長(zhǎng)度];
示例:int[] arr = new int[5];
格式2:
元素類(lèi)型[] 數(shù)組名 = new 元素類(lèi)型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
?
如果需要存儲(chǔ)大量的數(shù)據(jù),例如如果需要讀取100個(gè)數(shù),那么就需要定義100個(gè)變量,顯然重復(fù)寫(xiě)100次代碼,是沒(méi)有太大意義的。如何解決這個(gè)問(wèn)題,Java語(yǔ)言提供了數(shù)組(array)的數(shù)據(jù)結(jié)構(gòu),是一個(gè)容器可以存儲(chǔ)相同數(shù)據(jù)類(lèi)型的元素,可以將100個(gè)數(shù)存儲(chǔ)到數(shù)組中。
1數(shù)組的概念
???
同一種類(lèi)型數(shù)據(jù)的集合。其實(shí)數(shù)組就是一個(gè)容器。運(yùn)算的時(shí)候有很多數(shù)據(jù)參與運(yùn)算,那么首先需要做的是什么.不是如何運(yùn)算而是如何保存這些數(shù)據(jù)以便于后期的運(yùn)算,那么數(shù)組就是一種用于存儲(chǔ)數(shù)據(jù)的方式,能存數(shù)據(jù)的地方我們稱(chēng)之為容器,容器里裝的東西就是數(shù)組的元素,
數(shù)組可以裝任意類(lèi)型的數(shù)據(jù),雖然可以裝任意類(lèi)型的數(shù)據(jù),但是定義好的數(shù)組只能裝一種元素, 也就是數(shù)組一旦定義,那么里邊存儲(chǔ)的數(shù)據(jù)類(lèi)型也就確定了。
2 數(shù)組的好處
??? 存數(shù)據(jù)和不存數(shù)據(jù)有什么區(qū)別嗎?數(shù)組的最大好處就是能都給存儲(chǔ)進(jìn)來(lái)的元素自動(dòng)進(jìn)行編號(hào). 注意編號(hào)是從0開(kāi)始。方便操作這些數(shù)據(jù)。
例如 學(xué)生的編號(hào),使用學(xué)號(hào)就可以找到對(duì)應(yīng)的學(xué)生。
3數(shù)組的格式
???? 元素類(lèi)型[] 數(shù)組名 = new 元素類(lèi)型[元素個(gè)數(shù)或數(shù)組長(zhǎng)度];
示例:int[] arr = new int[5];
案例:
需求: 想定義一個(gè)可以存儲(chǔ)3個(gè)整數(shù)的容器
實(shí)現(xiàn):
1聲明數(shù)組變量
為了使用數(shù)組必須在程序中聲明數(shù)組,并指定數(shù)組的元素類(lèi)型
=左半部分:
??? 先寫(xiě)左邊明確了元素類(lèi)型 是int
,容器使用數(shù)組,那么如何來(lái)標(biāo)識(shí)數(shù)組?.那么用一個(gè)特殊的符號(hào)[]中括號(hào)來(lái)表示。想要使用數(shù)組是需要給數(shù)組起一個(gè)名字的,那么我們?cè)谶@里給這個(gè)數(shù)組起名字為x
.接著跟上等號(hào)。
代碼體現(xiàn):?
int [] x
注意:int x[] 也是一種創(chuàng)建數(shù)組的格式。推薦使用int [] x 的形式聲明數(shù)組。
2創(chuàng)建數(shù)組
=右半部分:
要使用一個(gè)新的關(guān)鍵字.叫做new。new 用來(lái)在內(nèi)存中產(chǎn)生一個(gè)容器實(shí)體,數(shù)據(jù)要存儲(chǔ)是需要有空間的,存儲(chǔ)很多數(shù)據(jù)的空間用new 操作符來(lái)開(kāi)辟,new
int[3]; 這個(gè)3是元素的個(gè)數(shù)。右邊這部分就是在內(nèi)存中定義了一個(gè)真實(shí)存在的數(shù)組,能存儲(chǔ)3個(gè)元素。
new int[3] 做了兩件事情,首先使用new int[3] 創(chuàng)建了一個(gè)數(shù)組,然后把這個(gè)數(shù)組的引用賦值給數(shù)組變量x。
?
int [] x=new int[3];
x 是什么類(lèi)型?
任何一個(gè)變量都得有自己的數(shù)據(jù)類(lèi)型。注意這個(gè)x 不是int 類(lèi)型的 。int 代表的是容器里邊元素的類(lèi)型。那么x 是數(shù)組類(lèi)型的。
數(shù)組是一種單獨(dú)的數(shù)據(jù)類(lèi)型。數(shù)據(jù)類(lèi)型分為2大派,分為基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型。
第二大派是引用數(shù)據(jù)類(lèi)型。那么大家現(xiàn)在已經(jīng)接觸到了引用數(shù)據(jù)類(lèi)型三種當(dāng)中的一種。就是數(shù)組類(lèi)型 [] 中括號(hào)就代表數(shù)組。
4、int[] arr = new int[5];在內(nèi)存中發(fā)生了什么?
內(nèi)存任何一個(gè)程序,運(yùn)行的時(shí)候都需要在內(nèi)存中開(kāi)辟空間.int[] arr = new int[5];
這個(gè)程序在內(nèi)存中是什么樣?這就涉及到了java虛擬機(jī)在執(zhí)行程序時(shí)所開(kāi)辟的空間,那么java開(kāi)辟啟動(dòng)了多少空間呢?繼續(xù)學(xué)習(xí)java的內(nèi)存結(jié)構(gòu)。
1.??? 數(shù)組的定義
格式1:
元素類(lèi)型[] 數(shù)組名 = new 元素類(lèi)型[元素個(gè)數(shù)或數(shù)組長(zhǎng)度];
示例:int[] arr = new int[5];
格式2:
元素類(lèi)型[] 數(shù)組名 = new 元素類(lèi)型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};
注意:給數(shù)組分配空間時(shí),必須指定數(shù)組能夠存儲(chǔ)的元素個(gè)數(shù)來(lái)確定數(shù)組大小。創(chuàng)建數(shù)組之后不能修改數(shù)組的大小??梢允褂胠ength 屬性獲取數(shù)組的大小。
遍歷數(shù)組
2.??? 數(shù)組初始化
數(shù)組的格式
int[] x = new int[3];
?????? x[0] = 1;
?????? x[1] = 2;
另一種定義:該形式可以直接明確數(shù)組的長(zhǎng)度,以及數(shù)組中元素的內(nèi)容
int[] x = { 1, 2, 3 };
?
int[] x=new int[]{1,2,3};
?
?
初始化方式1:不使用運(yùn)算符new
int[] arr = { 1, 2, 3, 4, 5 };
int[] arr2 = new int[] { 1, 2, 3, 4, 5 };
初始化方式2:?????
int[] arr3=new int[3];
arr3[0]=1;
arr3[1]=5;
arr3[2]=6;
?
如果數(shù)組初始化中不使用運(yùn)算符new。需要注意:下列寫(xiě)法是錯(cuò)誤的。
int[] arr;
arr={1,2,3,4,5};
此時(shí)初始化數(shù)組,必須將聲明,創(chuàng)建,初始化都放在一條語(yǔ)句中個(gè),分開(kāi)會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤。
所以只能如下寫(xiě):
int[] arr={1,2,3,4,5};
?
3.??? 數(shù)組遍歷
public static void main(String[] args) {
?????? int[] x = { 1, 2, 3 };
?????? for (int y = 0; y < 3; y++) {
?????????? System.out.println(x[y]);
?????????? // System.out.println("x["+y+"]="+x[y]); 打印效果 x[0]=1;
?????? } // 那么這就是數(shù)組的第一個(gè)常見(jiàn)操作.遍歷
??? }
數(shù)組中有一個(gè)屬性可以獲取到數(shù)組中元素的個(gè)數(shù),也就是數(shù)組的長(zhǎng)度. 數(shù)組名.length
public static void main(String[] args) {
?????? int[] x = { 1, 2, 3 };
?????? for (int y = 0; y < x.length; y++) {
?????????? System.out.println(x[y]);
?????????? // System.out.println("x["+y+"]="+x[y]); 打印效果 x[0]=1;
?????? } // 那么這就是數(shù)組的第一個(gè)常見(jiàn)操作.遍歷
??? }
?
4.??? 數(shù)組的常見(jiàn)異常
一數(shù)組角標(biāo)越界異常:,注意:數(shù)組的角標(biāo)從0開(kāi)始。
public static void main(String[] args) {
?????? int[] x = { 1, 2, 3 };
?????? System.out.println(x[3]);
?????? //java.lang.ArrayIndexOutOfBoundsException
}
?
?
?
二 空指針異常:
public static void main(String[] args) {
?????? int[] x = { 1, 2, 3 };
?????? x = null;
?????? System.out.println(x[1]);
?????? // java.lang.NullPointerException
??? }
?
數(shù)組:
什么時(shí)候使用數(shù)組:當(dāng)元素較多時(shí)為了方便操作這些數(shù)組,會(huì)先進(jìn)行來(lái)臨時(shí)存儲(chǔ),所使用的容器就是數(shù)組。
特點(diǎn):
數(shù)組長(zhǎng)度是固定的。
?
5.??? 數(shù)組的內(nèi)存分析
案例分析一:
?
?
?
案例分析二:
??????????
?
6.??? 數(shù)組的常見(jiàn)操作
6.1案例一個(gè)數(shù)組取出最大值
?????? ??
??
/*定義一個(gè)獲取最大值的功能: 1、確定結(jié)果 :返回值類(lèi)型 int 2、未知內(nèi)容:要獲取哪個(gè)數(shù)組的最大值沒(méi)有確定,則是數(shù)組沒(méi)有確定 思路:
1、定義一個(gè)變量,記錄住數(shù)組的比較大的元素。 2、遍歷整個(gè)數(shù)組,讓數(shù)組的每一個(gè)元素都和該變量進(jìn)行對(duì)比即可。
3、當(dāng)變量遇到比它大的元素,則讓該變量記錄該元素的值,當(dāng)循環(huán)結(jié)束時(shí),最大 值產(chǎn)生了 */ public static int getMax(int[]
arr) { //定義變量記錄較大的值,初始化為數(shù)組中的任意一個(gè)元素。 int max = arr[0]; for(int x=1;
x<arr.length; x++) { if(arr[x]>max) max = arr[x]; } return max; }
?
6.2直接排序
案例二:使用直接排序?qū)?shù)組進(jìn)行排序:
? ? ?
/* 選擇排序。 以一個(gè)角標(biāo)的元素和其他元素進(jìn)行比較。 在內(nèi)循環(huán)第一次結(jié)束,最值出現(xiàn)的頭角標(biāo)位置上。 */ public static void
selectSort(int[] arr) { for(int x=0; x<arr.length-1; x++) { for(int y=x+1;
y<arr.length; y++)//為什么y的初始化值是 x+1? 因?yàn)槊恳淮伪容^, //都用x角標(biāo)上的元素和下一個(gè)元素進(jìn) 行比較。 {
if(arr[x]>arr[y]) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } } }
???????????????????
6.3冒泡排序
案例三:冒泡排序
??
/* 冒泡排序。 比較方式:相鄰兩個(gè)元素進(jìn)行比較。如果滿(mǎn)足條件就進(jìn)行位置置換。 原理:內(nèi)循環(huán)結(jié)束一次,最值出現(xiàn)在尾角標(biāo)位置。 */ public
static void bubbleSort(int[] arr) { for(int x=0; x<arr.length-1; x++) { for(int
y=0; y<arr.length-x-1; y++)//-x:讓每次參與比較的元減。 //-1:避免角標(biāo)越界。 { if(arr[y]>arr[y+1])
{ int temp = arr[y]; arr[y] = arr[y+1]; arr[y+1] = temp; } } } }
6.4折半查找(二分法)
案例四:
?
?
/* 為了提高查找效率,可使用折半查找的方式,注意:這種查找只對(duì)有序的數(shù)組有效。 這種方式也成為二分查找法。 */ public static int
halfSeach(int[] arr,int key) { int min,mid,max; min = 0; max = arr.length-1;
mid = (max+min)/2; while(arr[mid]!=key) { if(key>arr[mid]) min = mid + 1; else
if(key<arr[mid]) max = mid - 1; if(min>max) return -1; mid = (max+min)/2; }
return mid; }
?
案例五:數(shù)組翻轉(zhuǎn)
? ??
/* 反轉(zhuǎn)其實(shí)就是頭角標(biāo)和尾角標(biāo)的元素進(jìn)行位置的置換, 然后在讓頭角標(biāo)自增。尾角標(biāo)自減。 當(dāng)頭角標(biāo)<尾角標(biāo)時(shí),可以進(jìn)行置換的動(dòng)作。 */ public
static void reverseArray(int[] arr) { for(int start=0,end=arr.length-1;
start<end; start++,end--) { swap(arr,start,end); } } //對(duì)數(shù)組的元素進(jìn)行位置的置換。 public
static void swap(int[] arr,int a,int b) { int temp = arr[a]; arr[a] = arr[b];
arr[b] = temp; }
3? ? 、 二維數(shù)組
Arrays的使用
??????
遍歷: toString()??? 將數(shù)組的元素以字符串的形式返回
排序: sort()??????? 將數(shù)組按照升序排列
查找: binarySearch()在指定數(shù)組中查找指定元素,返回元素的索引,如果沒(méi)有找到返回(-插入點(diǎn)-1) 注意:使用查找的功能的時(shí)候,數(shù)組一定要先排序。
二維數(shù)組:
?
????? 吸煙:?
?????? 沒(méi)錢(qián)?????? 零買(mǎi)?? 1根???????? ????????一個(gè)變量
?????? 稍微有錢(qián)?? 一包?? 一維數(shù)組?? ??????????? ??20根變量
?????? ?? 很有錢(qián)???? 一條?? 10包(二維數(shù)組)??????? 二維數(shù)組
?
二維數(shù)組:實(shí)質(zhì)就是存儲(chǔ)是一維數(shù)組。
數(shù)組定義:
?????? 數(shù)組類(lèi)型[][] 數(shù)組名 = new 數(shù)組類(lèi)型[一維數(shù)組的個(gè)數(shù)][每一個(gè)一維數(shù)組中元素的個(gè)數(shù)];
??????
疑問(wèn):?為什么a.length = 3, a[0].length = 4?
?
數(shù)組的初始化:
?????? 靜態(tài)初始化:
????????????? int [][] a = new int[][]{ {12,34,45,89},{34,56,78,10},{1,3,6,4}
};
?????? 動(dòng)態(tài)初始化:
?????????????
二維數(shù)組常見(jiàn)的操作:
* 遍歷二維數(shù)組
* 對(duì)二維數(shù)組求和
?
class Demo3
{
??? // 定義一個(gè)遍歷二維數(shù)組的功能函數(shù)
??? public static void printArr2( int [][] a ){
??? ?? // 1. 拆開(kāi)二維數(shù)組
??? ?? for ( int i = 0 ; i < a.length ; i++ )
??? ?? {
?????? ?? // 2. 拆開(kāi)一維數(shù)組獲取數(shù)據(jù)
?????? ?? for ( int j = 0 ; j < a[i].length ; j++ )
?????? ?? {
????????????? System.out.print( a[i][j]+" ," );
?????? ?? }
??? ?? }
???
??? }
??? // 定義一個(gè)函數(shù)計(jì)算二維數(shù)組中的元素的累加和
??? public static long getSum( int [][] a ){
?????? // 0. 定義一個(gè)結(jié)果變量
??????? long sum = 0L;
??? ?? // 1. 拆開(kāi)二維數(shù)組
??? ?? for ( int i = 0 ; i < a.length ; i++ )
??? ?? {
?????? ?? // 2. 拆開(kāi)一維數(shù)組獲取數(shù)據(jù)
?????? ?? for ( int j = 0 ; j < a[i].length ; j++ )
?????? ?? {
????????????? sum+=a[i][j];
?????? ?? }
??? ?? }
??? ?? return sum;
??? }
???
??? // 統(tǒng)計(jì)二維數(shù)組中元素的個(gè)數(shù)
??? public static int getDataCount( int [][] a ){
??? ?? // 0. 記錄元素個(gè)數(shù)
??? ?? int? count = 0;
??? ?? // 1. 拆開(kāi)二維數(shù)組
??? ?? for ( int i = 0 ; i < a.length ; i++ )
??? ?? {
?????? ?? // 2. 拆開(kāi)一維數(shù)組獲取數(shù)據(jù)
?????? ?? for ( int j = 0 ; j < a[i].length ; j++ )
?????? ?? {
????????????? count++;
?????? ?? }
??? ?? }
??? ? return count;
??? }
??? public static void main(String[] args)
??? {
??????
?????? int [][] a = new int[][]{ {23,4,5},{2},{4,5,78,56,90} };
?????? printArr2( a );
??????? System.out.println();
?????? System.out.println("累加和是: "+getSum( a ) );
?????? System.out.println("統(tǒng)計(jì)元素個(gè)數(shù): "+getDataCount( a ) );
?????? System.out.println("Hello World!");
??????
??????
??? }
}
熱門(mén)工具 換一換
