在操作數組時,經常需依次訪問數組中的每個元素,這種操作成為數組的遍歷。
public class ArrayDemo04 { public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5 }; // 定義數組 // 使用for循環遍歷數組的元素 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); // 通過索引訪問元素 } } }
數組的常見問題
1、數組的最值
public class ArrayDemo05 { public static void main(String[] args) { int[] arr = { 4, 1, 6, 3, 9, 8 }; // 定義一個數組 int max = arr[0]; // 定義變量max用於記住最大數,首先假設第一個元素為最大值 // 下面通過一個for循環遍歷數組中的元素 for (int x = 1; x < arr.length; x++) { if (arr[x] > max) { // 比較 arr[x]的值是否大於max max = arr[x]; // 條件成立,將arr[x]的值賦給max } } System.out.println("max=" + max); // 打印最大值 } }
通過for 循環獲取數組中的最大值,賦值給max變量。
首先假設數組中第一個元素arr[0]為最大值,然后使用for循環對數組進行遍歷,在遍歷的過程中只要遇到比max值還大的元素,就將該元素賦值給max。這樣一來,變量max就能夠在循環結束時記住數組中的最大值。需要注意的是,在for循環中的變量i是從1開始的,這樣寫的原因是程序已經假設第一個元素為最大值,for循環中只需要從第二個元素開始比較,從而提高程序的運行效率。
二、數組異常
1、數組越界異常
每個數組的索引都有一個范圍,即0~length-1。在訪問數組的元素時,索引不能超出這個范圍,否則程序會報錯。
2、空指針異常
在使用變量引用一個數組時,變量必須指向一個有效的數組對象,如果該變量的值為null,則意味着沒有指向任何數組,此時通過該變量訪問數組的元素會出現空指針異常。
三 、 二維數組
二維數組的定義有很多方式,接下來針對幾種常見的方式進行詳細地講解,具體如下:
第一種方式:
int[ ][ ] arr = new int[3][4];
上面的代碼相當於定義了一個3*4的二維數組,即二維數組的長度為3,二維數組中的每個元素又是一個長度為4的數組
圖1-1 二維數組
第二種方式:
int[ ][ ] arr = new int[3][ ];
第二種方式和第一種類似,只是數組中每個元素的長度不確定,
第三種方式:
int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};
上面的二維數組中定義了三個元素,這三個元素都是數組,分別為{1,2}、{3,4,5,6}、{7,8,9},
對二維數組中元素的訪問也是通過角標的方式,如需訪問二維數組中第一個元素數組的第二個元素,具體代碼如下:
arr[0][1];
二維數組的元素訪問
class ArrayDemo08 { public static void main(String[] args){ //定義二維數組的方式 int[][] arr = new int[3][4]; System.out.println( arr ); System.out.println("二維數組的長度: " + arr.length); //獲取二維數組的3個元素 System.out.println( arr[0] ); System.out.println( arr[1] ); System.out.println( arr[2] ); System.out.println("打印第一個一維數組的元素值"); System.out.println( arr[0][0] ); System.out.println( arr[0][1] );//訪問的為二維數組中第1個一維數組的第2個元素 System.out.println( arr[0][2] ); System.out.println( arr[0][3] ); System.out.println("打印第二個一維數組的元素值"); System.out.println( arr[1][0] ); System.out.println( arr[1][1] ); System.out.println( arr[1][2] ); System.out.println( arr[1][3] ); System.out.println("打印第三個一維數組的元素值"); System.out.println( arr[2][0] ); System.out.println( arr[2][1] ); System.out.println( arr[2][2] ); System.out.println( arr[2][3] ); } }

1.1.1 二維數組元素遍歷與數組元素累加和
class ArrayDemo09 { public static void main(String[] args){ //一維數組的求累加和並遍歷 int[] arr = {10,20,30,40,50}; int sum = 0; for (int i=0; i<arr.length; i++) { //System.out.println(arr[i]); sum += arr[i]; } System.out.println("sum= " + sum); System.out.println("---------------------"); //二維數組的求累加和並遍歷 int[][] arr2 = { {1,2},{3,4,5},{6,7,8,9,10} }; int sum2 = 0; for (int i=0; i<arr2.length; i++) { for (int j=0; j<arr2[i].length; j++) { //System.out.println(arr2[i][j]) sum2 += arr2[i][j]; } } System.out.println("sum2= "+ sum2); } }
輸出結果 sum=150 sum2 = 55
1.1.2 公司銷售總和練習
接下來通過一個案例來熟悉二維數組的使用。
例如要統計一個公司三個銷售小組中每個小組的總銷售額以及整個公司的銷售額。如下所示
l 第一小組銷售額為{11, 12}萬元
l 第二小組銷售額為{21, 22, 23}萬元
l 第三小組銷售額為{31, 32, 33, 34}萬元。
1public class ArrayDemo10 { 2 public static void main(String[] args) { 3 int[][] arr = new int[3][]; // 定義一個長度為3的二維數組 4 arr[0] = new int[] { 11, 12 }; // 為數組的元素賦值 5 arr[1] = new int[] { 21, 22, 23 }; 6 arr[2] = new int[] { 31, 32, 33, 34 }; 7 8 int sum = 0; // 定義變量記錄總銷售額 9 for (int i = 0; i < arr.length; i++) { // 遍歷數組元素 10 int groupSum = 0; // 定義變量記錄小組銷售總額 11 for (int j = 0; j < arr[i].length; j++) { // 遍歷小組內每個人的銷售額 12 groupSum = groupSum + arr[i][j]; 13 } 14 sum = sum + groupSum; // 累加小組銷售額 15 System.out.println("第" + (i + 1) + "小組銷售額為:" + groupSum + " 萬元"); 16 } 17 System.out.println("總銷售額為: " + sum + " 萬元"); 18 } 19}

在上述代碼中,第3行代碼定義了一個長度為3的二維數組,並在4~6行代碼中為數組的每個元素賦值。例程中還定義了兩個變量sum和groupSum,其中sum用來記錄公司的總銷售額,groupSum用來記錄每個銷售小組的銷售額。當通過嵌套for循環統計銷售額時,外層循環對三個銷售小組進行遍歷,內層循環對每個小組員工的銷售額進行遍歷,內層循環每循環一次就相當於將一個小組員工的銷售總額統計完畢,賦值給groupSum,然后把groupSum的值與sum的值相加賦值給sum。當外層循環結束時,三個銷售小組的銷售總額groupSum都累加到sum中,即統計出了整個公司的銷售總額。
