12.數(shù)組


1.數(shù)組(Array),?

多個(gè)相同類型的數(shù)據(jù),按照一定的順序排列的集合

并使用一個(gè)名字命名,并通過編號(hào)的方式對(duì)這些數(shù)據(jù)進(jìn)行統(tǒng)一管理


2.數(shù)組的組成:

數(shù)組名

下標(biāo)或索引

元素

數(shù)組的長度-->元素的個(gè)數(shù)


3.數(shù)組的特點(diǎn):

數(shù)組是有序排列的

數(shù)組本身是引用數(shù)據(jù)類型,數(shù)組內(nèi)的元素可以使任何數(shù)據(jù)類型(基本數(shù)據(jù)類型,引用數(shù)據(jù)類型)

創(chuàng)建數(shù)組對(duì)象會(huì)在內(nèi)存中開辟一整塊連續(xù)的空間.

數(shù)組的長度一旦確定,就不可以修改


4.數(shù)組的分類

? ? 按照維數(shù):????1維數(shù)組,2維數(shù)組....

? ? 按照元素類型:????基本數(shù)據(jù)類型元素的數(shù)組.引用數(shù)據(jù)類型元素的數(shù)組


5.一維數(shù)組的使用

? 5.1. 一維數(shù)組的聲明和初始化

// 一維數(shù)組的聲明和初始化

int num;//聲明

num = 10;//初始化

int id =1001;//聲明+初始化

int[] ids; //聲明

//1.1靜態(tài)初始化:數(shù)組的初始化和數(shù)組元素的賦值操作同時(shí)進(jìn)行

ids = new int[] {1001,1002,1003,1004};

//1.2動(dòng)態(tài)初始化:數(shù)組的初始化和數(shù)組元素的賦值操作分開進(jìn)行

String[] names = new String[5];

? ? ?5. 2.? 如何調(diào)用數(shù)組指定位置的元素

//2.如何調(diào)用數(shù)組指定位置的元素:通過角標(biāo)(索引)的方式調(diào)用

//數(shù)組的索引從0開始,到數(shù)組的長度-1結(jié)束

names[0] = "張0";

names[1] = "張1";

names[2] = "張2";

names[3] = "張3";

names[4] = "張4";

// names[5] = "張5";

? ? ? ?5. 3.? 如何獲取數(shù)組的長度

//3.如何獲取數(shù)組的長度. 使用length屬性

System.out.println(names.length);

? ?5. 4. 如何遍歷數(shù)組

for(int i = 0; i < names.length; i ++) {

System.out.println(names[i]);


? ?5. 5. 數(shù)組元素的默認(rèn)初始化值

????數(shù)組元素是整形:? ? ? ? 默認(rèn)值是? 0

? ? 浮點(diǎn)型:? ? ? ? 0.0

? ? char類型:? ? ? ?看上去是個(gè)空格 ,實(shí)際值是0? ? ?char型都會(huì)有對(duì)應(yīng)的ASCII 碼, 所以默認(rèn)值是asc碼為0的字符,??

? ? ?boolean :? ? ? ? false


? ?數(shù)組元素是引用數(shù)據(jù)類型時(shí): 默認(rèn)值是null


?6.二維數(shù)組的使用

數(shù)組本身是引用數(shù)據(jù)類型,可以看成是一維數(shù)組作為另一個(gè)數(shù)組的元素而存在

6.1二維數(shù)組的聲明和初始化

//靜態(tài)初始化

int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};

//動(dòng)態(tài)初始化

String[][] arr2 = new String[3][2];

String[][] arr3 = new String[3][];

//特別的寫法

int[][] arr = {{1,2,3},{4,5},{6,7,8}};

int[] arr4[] =new int[][]{{1,2,3},{4,5},{6,7,8}};

int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};

6.2如何調(diào)用數(shù)組指定位置的元素

System.out.println(arr1[0][1]);//2

System.out.println(arr2[1][1]);//由于未賦值String類型,是null

//System.out.println(arr3[1][0]);? java.lang.NullPointerException

6.3 獲取數(shù)組的長度

System.out.println(arr4.length);//3

System.out.println(arr4[0].length);//3

System.out.println(arr4[1].length);//2

6.4如何遍歷二維數(shù)組

for(int i=0 ; i < arr4.length; i++) {

????for(int j = 0; j<arr4[i].length;j++) {

????????System.out.print(arr4[i][j]);

????????}

????System.out.println();

}

6.5數(shù)組元素的默認(rèn)初始化值

在數(shù)組 int[][] arr = new int[4][3]中,

//外層元素為,arr[0],arr[1]等

//內(nèi)層元素為,arr[0][0],arr[1][2]等;


類型1:

外層元素的初始化值為地址值

內(nèi)層元素的初始化值,與一維數(shù)組初始化情況相同

int[][] arr = new int[4][3];

System.out.println(arr[0]);????//[I@7f63425a,是地址值

System.out.println(arr[0][0]);????//0? ?內(nèi)層元素是int類型,

System.out.println(arr);? ? ?//[[I@36d64342

int型默認(rèn)值為: 0

float? ? ? ? ? ? :? ? 0.0

Stirng? ? ? ? :? ? null


類型2:

double[][] arr3 = new double[4][];

System.out.println(arr3[1]); //null,因?yàn)槲促x值

System.out.println(arr3[1][0]); //報(bào)錯(cuò)空指針,因?yàn)檫€未初始化

外層元素的初始化值為? ? null

內(nèi)層元素的初始化值,? ? ? ? 不能調(diào)用,否則會(huì)報(bào)空指針


7.數(shù)組使用中常用的算法

7.1數(shù)組元素的賦值(楊輝三角,回形數(shù)等)

Scanner scan = new Scanner(System.in);

? ? //練習(xí)1,求二維數(shù)組所有元素的和

? ? int[][] array = new int[][] {{3,-5,6},{2,8},{9,-2,5,7}};

? ? int sum = 0;

? ? for (int i = 0; i < array.length; i++) {

for (int j = 0; j < array[i].length; j++) {

sum +=? array[i][j];

}

}

? ? System.out.println("二維數(shù)組的所有元素和是" + sum);


? ? /*練習(xí)2,

? ? ? * int[] x,y [];//此時(shí)表示聲明x為一維數(shù)組,y為二維數(shù)組

? ? ? * 因?yàn)?int[] a,b = int[] a 與 int[] b ,也就是 int[] x, int[] y[]

? ? ? * 在給x與y賦值后,以下選項(xiàng)可以編譯通過的是

? ? ? * 1,x[0] = y; // no

? ? ? * 2,y[0] = x; // yes

? ? ? * 3,y[0][0] = x;// no

? ? ? * 4,x[0][0] = y,// no

? ? ? * 5,y[0][0] = x[0];// yes

? ? ? * 6,x = y//no

? ? ? * 數(shù)組賦值需要滿足相同類型或者可以自動(dòng)類型提升

? ? ? */


? ? //練習(xí)三,使用二維數(shù)組打印一個(gè)指定行數(shù)楊輝三角

/*

* 1,第一行一個(gè)元素,第n行n個(gè)元素

* 2,每一行的第一個(gè)和最后一個(gè)是1

* 3,從第三行開始,對(duì)于非第一個(gè)元素和最后一個(gè)元素有

* yanghui[i][j]=yanghui[i-1][j-1] + yanghui[i-1][j]

*/

? ? //思路,對(duì)二維數(shù)組聲明賦值后打印


? ? //輸入行數(shù)

? ? System.out.println("請(qǐng)輸入要打印的楊輝三角行數(shù)");

? ? int line = scan.nextInt();

? ? int[][] array1 = new int[line][];//動(dòng)態(tài)聲明二維數(shù)組行數(shù)

? ? //聲明賦值二維數(shù)組

? ? for (int i = 0; i < array1.length; i++) {

array1[i] = new int[i+1];//聲明每行列數(shù)

array1[i][0] = 1;//每行第一個(gè)元素是1

array1[i][i] = 1;//每行最后一個(gè)元素是1

//可以寫成連續(xù)賦值的形式array1[i][0] = array[i][i] = 1;

//

for (int j = 0; j < array1[i].length; j++) {

if(j > 0 && j < i) {

array1[i][j]=array1[i-1][j-1] + array1[i-1][j];//每行其他元素滿足楊輝三角要求

}

}

/*第二種寫法,if在外層

* if(i > 1){

*? for(j = 1;j < array[i].length - 1;j++){

*? array1[i][j]=array1[i-1][j-1] + array1[i-1][j];

*? }

* }

*/

}

? ? ? ? //遍歷輸出楊輝三角

? ? for (int i = 0; i < array1.length; i++) {

for (int j = 0; j < array1[i].length; j++) {

System.out.print(array1[i][j] + " ");

}

System.out.println();

}


7.2求數(shù)值型數(shù)組中元素的最大值,最小值,平均數(shù),總和

(要求所有元素都是兩位數(shù))

int[] arr = new int[10];

for(int i = 0; i<arr.length;i++){

arr[i]=(int)(Math.random()*(99-10+1)+10);

}

//遍歷

for(int i =0; i<arr.length;i++){

System.out.println(arr[i]+"\t");

}

//求數(shù)組的最大值

int maxValue = arr[0]; //

for(int i= 0; i< arr.length;i++) {

if(maxValue < arr[i]) {

maxValue = arr[i];

}

}

System.out.println("最大值為" + maxValue + "\t");

//求數(shù)組的最小值

int minValue = arr[0];

for(int i= 0; i< arr.length;i++) {

if(minValue > arr[i]) {

minValue = arr[i];

}

}

System.out.println("最小值為" + minValue + "\t");

//求數(shù)組的總和

int sum = 0;

for(int i= 0; i< arr.length;i++) {

sum += arr[i];

}

System.out.println("總和最小值為" + sum + "\t");

//求數(shù)組的平均數(shù)

int avgValue = sum / arr.length;

System.out.println("平均數(shù)為" + avgValue );



7.3數(shù)組的復(fù)制,反轉(zhuǎn),查找(線性查找,二分法查找)

String[] arr = new String[]{"AA","BB","CC","DD","EE","FF","GG"};


//數(shù)組的復(fù)制(區(qū)別于數(shù)組的賦值, arr=arr1)

String[] arr1 = new String[arr.length];

for(int i = 0;i <arr1.length; i++){

arr1[i] = arr[i];

//System.out.println(arr[i]);

//System.out.println(arr1[i]);

}


//數(shù)組的反轉(zhuǎn),利用一個(gè)臨時(shí)變量

for(int i = 0; i < arr1.length / 2; i++){

String temp = arr[i];

arr[i] = arr[arr.length -i - 1];

arr[arr.length - i -1] =temp;

}


//遍歷

for(int i = 0; i < arr1.length; i++){

System.out.println(arr[i] + "\t");

}

}

//查找

//線性查找:

String dest = "BB";

boolean isFlag = true;

for(int i = 0; i < arr1.length; i++){

if(dest.equals(arr[i])){

System.out.println("找到了指定的元素,位置為:" + i);

isFlag = false;

break;

}

}

if(isFlag){

System.out.println("很遺憾,沒找到");

}


注:

若有2個(gè)數(shù)組,array1,array2.

array1 = array2;

并不是復(fù)制,而是將array1指向堆中array2所指向的地址.所以修改array1,array2也會(huì)變化

所以數(shù)組的復(fù)制,需要new一個(gè)新的數(shù)組,然后進(jìn)行元素的賦值array1[i]=array2[i]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容