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!");

          ??????

          ??????

          ??? }

          }

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問(wèn)題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                天天日天天射天天视 | 日韩A片在线 | 亚洲97视频 | 久久久久久久久久久爱 | 国产内射视频免费观看 |