提綱:
1、方法的概念 2、方法語法 3、方法使用 4、參數(shù) 5、返回值 6、方法的分類 7、作業(yè)
一、數(shù)組的概念
1.1、為什么使用數(shù)組
如果說程序中,需要存儲大量的相同類型的一組數(shù)據(jù),如果直接使用變量來進行存儲,每個變量只能存儲一個值,就需要大量的變量。 1、代碼過于臃腫 2、程序的可讀性差 3、數(shù)據(jù)維護較差
1.2、數(shù)組的概念
數(shù)組的概念: 就是一組相同數(shù)據(jù)類型的數(shù)據(jù)。內(nèi)存上是開辟的連續(xù)的內(nèi)存空間。
1.3、數(shù)組的特點?
1、定長。容量固定。數(shù)組一旦創(chuàng)建后,那么長度不能更改。(容量,長度,都是指存儲的數(shù)量) 2、存儲的數(shù)據(jù)類型必須都一致。 3、在內(nèi)存中空間連續(xù)挨個。 4、數(shù)組是引用類型的數(shù)據(jù),存在棧和堆的地址引用關(guān)系。 Java中:兩大數(shù)據(jù)類型 基本:4類8種 引用:數(shù)組,對象,集合。。。。
二、數(shù)組的使用
2.1、數(shù)組的使用
step1:先創(chuàng)建數(shù)組 step2:使用數(shù)組:存儲數(shù)據(jù),訪問數(shù)據(jù)。
2.2、數(shù)組的語法
創(chuàng)建數(shù)組的語法: 數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[長度、容量、個數(shù)]; 數(shù)據(jù)類型 數(shù)組名[] = new 數(shù)據(jù)類型[長度];//也可以 使用的語法: 數(shù)組名[index],操作數(shù)組 index:因為一個數(shù)組存儲了多個數(shù)據(jù)(也叫元素),每個元素都有一個下標,也叫索引,index。理解起來就是給每個數(shù)據(jù)排個編號,固定從0開始,0,1,2,3,4.。。。到長度減1。 數(shù)組的下標不能超出這個范圍。否則就會下標越界:java.lang.ArrayIndexOutOfBoundsException
示例代碼:
public class Test1Array { public static void main(String[] args){ //1.變量的定義 int num = 10; Sy(num); ? //2.數(shù)組 /* 創(chuàng)建數(shù)組:語法格式 數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[容量/長度/個數(shù)]; ? 數(shù)組是引用類型的數(shù)據(jù): a中存儲的是數(shù)組的實際的地址。 */ ? int[] a = new int[5];//聲明一個數(shù)組,并創(chuàng)建出來,然后就可以使用這個數(shù)組了。 Sy(a); ? //3.使用數(shù)組:存儲數(shù)據(jù) a[0] = 10; a[1] = 20; a[2] = 30; a[3] = 40; a[4] = 50; //a[5] = 100; ? //獲取數(shù)據(jù) Sy(a[0]);//打印數(shù)組的第一個元素 Sy(a[1]);//打印數(shù)組的第二個元素 Sy(a[2]);//打印數(shù)組的第三個元素 Sy(a[3]);//打印數(shù)組的第四個元素 Sy(a[4]);//打印數(shù)組的第五個元素 ? //課堂練習:創(chuàng)建一個數(shù)組, 存儲班級5位同學的性別。 char[] arr2 = new char[5]; arr2[0] = '男'; arr2[1] = '男'; arr2[2] = '男'; arr2[3] = '女'; arr2[4] = '女'; ? //打印悄悄 Sy(arr2[0]); Sy(arr2[1]); Sy(arr2[2]); Sy(arr2[3]); Sy(arr2[4]); ? } }
2.3、內(nèi)存分析(擴展)
內(nèi)存:存儲數(shù)據(jù) A:棧,存放的是基本數(shù)據(jù)類型的變量,以及引用類型變量的引用。 特點:函數(shù)中的變量所占用的空間,執(zhí)行之后就會銷毀。 B:堆,存放的是new出來的東西。 特點:執(zhí)行之后,堆里存儲的內(nèi)容(對象等),會被標記為垃圾,但是不會立即被銷毀,而是等待系統(tǒng)的垃圾回收機制來回收(GC)。 JVM,GC(Grabage Collection)
2.4、數(shù)組的長度
獲取數(shù)組的長度:length,數(shù)組的一個屬性。 數(shù)組名.length--->獲取這個數(shù)組的長度。
2.5、使用循環(huán)遍歷數(shù)組
2.5.1、普通的循環(huán)
1、遍歷:依次訪問數(shù)組中每個元素??梢再x值,可以取值。 2、因為操作數(shù)組,就是數(shù)組名字配合下標,而下標固定都是從0開始,到長度減1。 for(int i = 0;i < arr2.length;i++){ Sy(arr2[i]); }
示例代碼:
class Test2ArrayFor { public static void main(String[] args) { //定義了一個數(shù)組,存儲了5個學生的性別。 char[] arr2 = new char[5]; arr2[0] = '男'; arr2[1] = '男'; arr2[2] = '男'; arr2[3] = '女'; arr2[4] = '女'; ? /* Sy(arr2[0]); Sy(arr2[1]); Sy(arr2[2]); Sy(arr2[3]); Sy(arr2[4]); */ ? //借助循環(huán)來打印數(shù)組:for,while,do-while循環(huán) ? for(int i = 0;i < arr2.length;i++){ //i:0,1,2,3,,5 Sy(arr2[i]); //arr2[0],arr2[1],arr2[2],arr2[3],arr2[4] } ? ? Sy);//專門用于獲取一個數(shù)組的長度,5 //課堂練習1:定義一個int類型的數(shù)組,求該數(shù)組中所有元素的總和。 ? //課堂練習2:統(tǒng)計這個數(shù)組中元素的平均值。 } } ?
2.5.2、for-each循環(huán)
for-each循環(huán):【擴展】 增強for循環(huán):JDK1.5的版本出現(xiàn)的。 特定的用法:專門用于獲取數(shù)組中的每一個元素的值。 語法結(jié)構(gòu): for(數(shù)據(jù)類型 變量名 : 數(shù)組名){ Sy(變量名); } 工作原理: for(int e :arr){ Sy(e); } int e,定義變量e, 依次獲取數(shù)組的元素,賦值給e 注意點: A:for-each只能獲取數(shù)組的數(shù)據(jù),但是不能給數(shù)組進行賦值 B:for-each,在代碼這個層面,不能操作下標。
示例代碼:
public class Test1ForEach { public static void main(String[] args){ /* 循環(huán)的遍歷:依次獲取里面的每一個元素 方法一:一個一個的獲取 ? 方法二:普通的循環(huán):for循環(huán) ? 方法三:for-each循環(huán): for(數(shù)據(jù)類型 變量名 : 數(shù)組名){ Sy(變量名); } ? element,元素。數(shù)組中存儲的數(shù)據(jù)-->數(shù)組的元素。 */ ? int[] arr = new int[4]; arr[0] = 1; arr[1] = 4; arr[2] = 3; arr[3] = 5; //方法一: Sy(arr[0]); Sy(arr[1]); Sy(arr[2]); Sy(arr[3]); ? //方法二: for(int i=0;i < arr.length;i++){ Sy("--->" + arr[i]); } ? ? //方法三: /* index-->0,1,2,3 arr--->[1,4,3,5] ? 工作原理: int e,定義變量e, 依次獲取數(shù)組的元素,賦值給e */ for(int e : arr){ //int e = 1; //e = 4; //e = 3; //e = 5; Sy(e); } ? Sy("------------------"); ? //普通的for循環(huán)賦值 int[] arr2 = new int[5];//1,3,5,7,9 for(int i = 0;i<arr2.length;i++){ //i:0,0 1 //i:1,2 3 //i:2,4 5 //i:3,6 7 //i:4,8 9 arr2[i] = i * 2 + 1; } for(int i=0;i<arr2.length;i++){ Sy(arr2[i]); } ? //通過for-each給數(shù)組進行賦值?不能給數(shù)組賦值。 for(int e : arr2){ // int e :1 e = 10;//僅僅是給變量e進行賦值,和arr2數(shù)組無關(guān)。 } for(int e : arr2){ Sy(e); } } }
2.6、數(shù)組中的默認值
數(shù)組的默認值,就是數(shù)組創(chuàng)建后,里面存儲的默認的數(shù)據(jù)。 數(shù)組的引用存在棧內(nèi)存中,數(shù)組本身存在堆內(nèi)存中。 數(shù)組創(chuàng)建完,就有默認的數(shù)據(jù)了。 數(shù)組中存儲的默認值: 數(shù)組中是有默認值的 整數(shù):0 小數(shù):0.0 字符:\u0000 布爾:false 其他:null ?
示例代碼:
class Test2DefaultValue { public static void main(String[] args) { /* 數(shù)組中存儲的默認值: 數(shù)組中是有默認值的 整數(shù):0 小數(shù):0.0 字符:\u0000 布爾:false 其他:null ? ? arr[i]? 1.先根據(jù)arr中存儲的地址,找到這塊堆內(nèi)存的數(shù)組元素。 2.找到這塊數(shù)組內(nèi)存后,根據(jù)i來獲取對應的空間 */ ? int n ;//可能尚未初始化變量n Sy(n); ? int[] arr = new int[5]; ? for(int i = 0;i<arr.length;i++){ Sy(arr[i]);// } ? String[] arr2 = new String[3]; ? for(int i = 0;i < arr2.length;i++){ Sy(arr2[i]); } Sy("Hello World!"); } } ?
2.7、創(chuàng)建數(shù)組的其他語法
/* 動態(tài)創(chuàng)建數(shù)組:先創(chuàng)建數(shù)組,然后再根據(jù)下標一個一個存儲數(shù)據(jù)。 A:先聲明,再創(chuàng)建(分配內(nèi)存空間) 數(shù)據(jù)類型 [] 數(shù)組名; 數(shù)組名 = new 數(shù)據(jù)類型[長度]; ? B:聲明并創(chuàng)建 數(shù)據(jù)類型 [] 數(shù)組名 = new 數(shù)據(jù)類型[長度]; 數(shù)據(jù)類型 數(shù)組名[] = new 數(shù)據(jù)類型[長度]; ? ? //靜態(tài)創(chuàng)建數(shù)組:聲明,創(chuàng)建,賦值一起寫完。 C:聲明,創(chuàng)建,并賦值 數(shù)據(jù)類型[] 數(shù)組名 = {數(shù)值1,數(shù)值2,數(shù)值3,數(shù)值4.。。。}; //=左邊聲明數(shù)組,=右邊,會先根據(jù){}中數(shù)據(jù)的個數(shù),然后再將{}中數(shù)據(jù),按照順序存儲進去。 完成了幾件事: 1.先聲明:int[] c 2.根據(jù){}中數(shù)組值的個數(shù),開辟堆內(nèi)存 3.將{}中的數(shù)組值,依次按照順序存入數(shù)組中 D:聲明,創(chuàng)建,并賦值 數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[]{數(shù)值1,數(shù)值2,數(shù)值3,數(shù)值4.。。。} */
示例代碼:
class Test3ArrayCreate { public static void main(String[] args) { //創(chuàng)建方式1:先聲明,再創(chuàng)建 int[] a = null;//引用類型默認賦值null a = new int[5];//創(chuàng)建,有new表示開辟堆內(nèi)存,創(chuàng)建數(shù)組了,才可以使用數(shù)組。 //創(chuàng)建方式2:聲明和創(chuàng)建寫一起 int[] b = new int[5]; Sy(a); ? //創(chuàng)建方式3:聲明,創(chuàng)建,賦值,寫一起 int[] c = {1,2,3,4,5}; /* 完成了幾件事: 1.先聲明:int[] c 2.根據(jù){}中數(shù)組值的個數(shù),開辟堆內(nèi)存 3.將{}中的數(shù)組值,依次按照順序存入數(shù)組中 */ Sy); for(int e :c){ Sy(e); } ? //創(chuàng)建方式4: int[] d = new int[]{1,2,3,4,5}; Sy); ? ? ? int[] e; e = new int[]{1,2,3,4,5}; for(int i:e){ Sy(i); } ? } } ?
2.8、數(shù)組的地址轉(zhuǎn)移
Java中的數(shù)據(jù)分為兩大類: 基本類型:4類8種 操作的都是數(shù)值本身 引用類型:數(shù)組 操作的是地址 ? 基本類型進行賦值:數(shù)值 引用類型進行賦值:地址
示例代碼:
class Test4ArrayAddress { public static void main(String[] args) { /* 數(shù)組:引用類型的數(shù)據(jù) 數(shù)組名,存儲是引用地址。 */ ? int[] a = new int[3]; Sy);//3 Sy(a);//a數(shù)組的地址 Sy(a[0]);//0 ? a[0] = 1; a[1] = 2; a[2] = 3; ? int[] b = {4,5,6,7}; Sy);//4 Sy(b);//b的地址 Sy(b[0]);//4 ? int[] c = a;//將a的值賦值給c,就是將a存儲的數(shù)組的地址賦值給c //a和c存儲的地址相同,那么就指向了同一個數(shù)組 Sy);//3 Sy(c);//a的地址 Sy(c[0]);//1 ? c[0] = 100; Sy(a[0]); Sy(b[0]); Sy(c[0]); ? ? b = c; ? b[1] = 200; Sy(a[1]);//200 Sy(b[1]);//200 Sy(c[1]);//200 ? Sy("Hello World!"); } } ?
內(nèi)存分析:
三、數(shù)組在方法中的使用
3.1、數(shù)組作為參數(shù)
數(shù)組是引用類型:傳遞的是地址。就是參數(shù)也會指向這塊內(nèi)存。當方法結(jié)束的時候,參數(shù)就銷毀了。
class Test5ArrayMethod { ? //設(shè)計一個方法,用于打印數(shù)組 public static void printArray(int[] arr){//int[] arr = a;a的地址給了arr,那么arr和 // a指向同一塊內(nèi)存的數(shù)組 for(int e : arr){ Sy(e +"\t"); } Sy(); } ? public static void main(String[] args) { ? int[] a = {1,2,3,4,5}; ? //設(shè)計一個方法,用于打印數(shù)組 printArray(a);//將a的地址,傳遞給arr Sy("Hello World!"); } }
內(nèi)存分析:
3.2、數(shù)組作為返回值
示例代碼:
//設(shè)計一個方法,用于創(chuàng)建一個數(shù)組, 并賦值。數(shù)組要返回給調(diào)用處 public static int[] createArray(int len){ int[] arr = new int[len]; for(int i = 0;i <arr.length;i++){ arr[i] = i * 2; } return arr; }
3.3、可變參數(shù)【擴展】
概念:一個方法可以接收的參數(shù)的數(shù)量不定(0-多個),但是類型固定。 ? 語法:數(shù)據(jù)類型 ... 參數(shù)名,可變參數(shù)在方法中當數(shù)組使用。 ? 注意事項: 1、如果參數(shù)列表中,除了可變參數(shù)還有其他的參數(shù),可變參數(shù)要寫在整個參數(shù)列表的最后。 2、一個方法最多只能有一個可變參數(shù)。
示例代碼:
class Test6Array { //求一組int類型的數(shù)據(jù)的和 public static void getSum(int ... nums ){ int sum = 0; for(int i = 0;i <nums.length;i++){ sum += nums[i]; } Sy("結(jié)果:" + sum); } ? public static void main(String[] args) { /* 可變參數(shù):同一種類型的參數(shù),類型固定的,但是個數(shù)不固定。 ? 語法的支持: 數(shù)據(jù)類型 ... 參數(shù)名 ? 可變參數(shù),類型固定,個數(shù)可變。0-多個 ? 在方法中可變參數(shù)當數(shù)組使用 */ ? getSum(1,2,3); getSum(1,2,3,4,5,6,7,8,9,10); Sy("Hello World!"); } } ?
四、數(shù)組的排序
排序:數(shù)組是存儲一組數(shù)據(jù),而且這些數(shù)據(jù)是有順序的。但是數(shù)值本身可能是無序的。通過算法來實現(xiàn)給數(shù)組進行排序,升序(數(shù)值從小到大),降序(數(shù)值從大到小)。
4.1 冒泡排序
冒泡排序:思路(升序):比較相鄰的兩個數(shù),較大的數(shù)據(jù)需要向后移動。長度減1。
1、冒泡排序:Bubble Sort 原理:比較相鄰的兩個數(shù),將較大的數(shù),向后移動。 class Test7BubbleSort { public static void main(String[] args) { int[] arr = {15,23,8,10,7}; ? for(int i= 1; i<arr.length;i++){//控制輪數(shù): //i=1,2,3,4 /* i=1, j<4 i=2, j<3 i=3, j<2 */ for(int j = 0;j < arr.length - i;j++){ if(arr[j] > arr[j+1]){ //交換 int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } ? for(int i = 0;i<arr.length;i++){ Sy(arr[i]); } ? } } ?
選擇排序:思路(升序):每次找個基準值,定一個變量k表示比較小的值的下標。每輪比較完,都在基準值上放一個比較小數(shù)。
4.2 選擇排序
示例代碼:
package com.qf.array; ? public class Test1SelectionSort { ? public static void main(String[] args) { /* * 選擇排序: 思路: 每一輪找個基準值:在基準值上放一個比較小的數(shù)。 * * 定義一個變量k,用于標記比較小的數(shù)的下標 */ int[] arr = { 15, 23, 8, 10, 7 }; ? for (int i = 0; i < arr.length - 1; i++) { // i = 0,1,2,3,表示輪數(shù) // 用于標記本輪中,要找的比較小的值。 int k = i; ? // 依次比較arr[k] for (int j = k + 1; j < arr.length; j++) { // 比較arr[k]和arr[j],如果arr[k]值大于arr[j]的值,將j賦值給k if (arr[k] > arr[j]) { k = j; } } ? // 交換arr[i]和arr[k] // i = 0, 第一輪:arr[0],arr[k] // i = 1,第二輪, arr[1],arr[k] // i =2,第三輪,arr[2],arr[k] if (k != i) { int temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } ? // 排序后,打印數(shù)組 for (int e : arr) { Sy(e); } ? } ? } ?
五、Arrays工具類
5.1、工具類:Arrays
JDK提供好的類: A:Scanner,讀取鍵盤 B:String,字符串 C:Math,數(shù)學的 D:Arrays,提供數(shù)組的常規(guī)操作的 E:System, 。。。
在Arrays類中,提供了很多關(guān)于數(shù)組常用的操作方法。
5.2、數(shù)組的復制
就是將一個數(shù)組的數(shù)據(jù),復制到另一個數(shù)值中。
方法一:通過循環(huán),依次復制,將原數(shù)組的數(shù)據(jù),一個一個,復制到目標數(shù)組中 方法二:Arrays類里方法:copyOf(原數(shù)組,新數(shù)組的長度)-->返回值是新數(shù)組 方法三:System類里的方法:arraycopy(原數(shù)組,原數(shù)組位置,新數(shù)組,新數(shù)組位置,拷貝的個數(shù))
示例代碼:
package com.qf.array; ? import java.u; ? public class Test3Copy { ? public static void main(String[] args) { int[] a = {1,2,3}; int[] b = new int[10]; //數(shù)組的拷貝: //方法一:自己通過循環(huán)依次復制,吭哧吭哧 for(int i=0;i<a.length;i++){ b[i] =a[i]; } for(int e :b){ Sy(e); } Sy("---------"); //方法二:借助于Arrays類 /* * copyOf(int[] 原始數(shù)組,int 新數(shù)組的長度) * 返回值就是新的數(shù)組 * */ int[] c = Arrays.copyOf(a, 5);//int[] c = {1,2,3,0,0} for(int e:c){ Sy(e); } Sy("--------"); //方法三:借助于System類 /* * arraycopy(src, srcPos, dest, destPos, length) * 第一個參數(shù):原始數(shù)組 * 第二個參數(shù):從原始數(shù)組的哪個下標開始復制 * 第三個參數(shù):目標數(shù)組 * 第四個參數(shù):目標數(shù)組從哪個下標開始貼 * 第五個參數(shù):拷貝幾個數(shù)據(jù) */ //int[] a = {1,2,3}; int [] d = new int[10]; Sy(a, 1, d, 5, 20); for(int e:d){ Sy(e+"\t"); } } ? } ?
六、二維數(shù)組
? 維度:dimension 數(shù)組:存儲相同類型的一組數(shù)據(jù)。 一維數(shù)組:數(shù)組中存儲的就是數(shù)據(jù)了。 二維數(shù)組:存儲的是一維數(shù)組。本質(zhì)也叫數(shù)組的數(shù)組。也被稱為矩陣:行和列的。 多維數(shù)組。。。
示例代碼:
package com.qf.array; ? public class Test4TDArray { ? public static void main(String[] args) { //二維數(shù)組 //一維數(shù)組 int[] a = {1,2,3,4}; int[][] b = { {1,2,3}, {4,5,6}, {7,8,9,10} }; Sy(b);//打印的是b這個二維數(shù)組的地址 Sy);//3 Sy(b[0]);//第一個一維數(shù)組的地址 Sy(b[1]); Sy(b[2]); Sy(b[0][1]);//2 Sy(b[1][2]);//6 for(int i=0;i<b.length;i++){ for(int j = 0;j<b[i].length;j++){ Sy(b[i][j]+"\t"); } Sy(); } //遍歷第三個一維數(shù)組 // for(int j = 0;j<b[2].length;j++){ // Sy(b[2][j]); // } Sy("------"); //for(數(shù)據(jù)類型 變量名 :數(shù)組) for(int[] arr :b){ for(int e :arr){ Sy(e+"\t"); } Sy(); } } ? } ?
示例代碼:
package com.qf.array; ? public class Test5TDArray { ? public static void main(String[] args) { //二維數(shù)組的創(chuàng)建語法 //1.先聲明,再創(chuàng)建 int[][] a = new int[3][4];//二維,一維一起創(chuàng)建 //2.先創(chuàng)建二維數(shù)組,后創(chuàng)建一維數(shù)組 int[][] b= new int[3][];//只是創(chuàng)建了二維數(shù)組,但是一維還沒有創(chuàng)建 b[0] = new int[3]; b[1] = new int[4]; b[2] = new int[4]; //3.聲明,創(chuàng)建,賦值 int[][] c = {{},{},{}}; //4. int[][] d = new int[][]{{},{},{}}; } ? } ?
七、作業(yè)
1、給定一個整數(shù)數(shù)組,例如{2,4,5,6,7,8}和一個數(shù)字,例如10,請設(shè)計一個方法,找出兩個元素,并且使這兩個數(shù)的和為給定數(shù)字,并打印出來。
2、某個公司采用公用電話傳遞數(shù)據(jù),數(shù)據(jù)是四位的整數(shù),在傳遞過程中是加密的,加密規(guī)則如下:每位數(shù)字都加上5,然后再用加5后的數(shù)字除以10的余數(shù)代替該數(shù)字,再將第一位和第四位交換,第二位和第三位交換。打印加密后的數(shù)字。
3、定義一個數(shù)組,存儲以下數(shù)據(jù):{1,2,3,4,5,6,7,8,9},請查找該數(shù)組中,是否存在數(shù)字8。
1.《(java如何打印二維數(shù)組)java二維數(shù)組遍歷》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《(java如何打印二維數(shù)組)java二維數(shù)組遍歷》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/keji/3213298.html