第二十一章 數組的常用操作
作者:張子默
一、數組越界異常
public static void main(String[] args) {
int[] arr = {1,2,3};
System.out.println(arr[3]);
}
創建數組,賦值3個元素,數組的索引就是0,1,2,沒有3索引,因此我們不能訪問數組中不存在的索引,程序運行後,將會拋出ArrayIndexOutOfBoundsException
數組越界異常。在開發中,數組越界異常是不能出現的,一旦出現了,就必須要修改我們編寫的代碼。
1、實例
/*
數組的索引編號從0開始,一直到"數組的長度-1"爲止。
如果訪問數組元素的時候,索引編號並不存在,那麼將會發生數組索引越界異常:ArrayIndexOutOfBoundsException
原因:索引編號寫錯了
*/
public class Demo08ArrayIndex {
public static void main(String[] args) {
int[] array = {15, 25, 35};
System.out.println(array[0]); // 15
System.out.println(array[1]); // 25
System.out.println(array[2]); // 35
System.out.println(array[3]);
}
}
二、數組空指針異常
public static void main(String[] args) {
int[] arr = {1,2,3};
arr = null;
System.out.println(arr[0]);
}
arr = null
這行代碼,意味着變量arr將不會再保存數組的內存地址,也就不允許再操作數組了,因此運行的時候會拋出NullPointerException
空指針異常。在開發中,數組的空指針異常是不能出現的,一旦出現了,就必須要修改我們編寫的代碼。
三、獲取數組的長度
/*
如何獲取數組的長度,格式:數組名稱.length
這將會得到一個int數字,代表數組的長度
數組一旦創建,程序運行期間,長度不可改變
*/
public class Demo03ArrayLength {
public static void main(String[] args) {
int[] arrayA = new int[3];
int[] arrayB = {10, 20, 30, 3, 5, 4, 6, 7, 8, 8, 65, 4, 44, 6, 10};
int len = arrayB.length;
System.out.println("arrayB數組的長度是:" + len);
System.out.println("==================");
int[] arrayC = new int[3];
System.out.println(arrayC.length); // 3
arrayC = new int[5];
System.out.println(arrayC.length);
}
}
四、數組遍歷
-
**數組遍歷:**就是將數組中的每個元素分別獲取出來,就是遍歷。遍歷也是數組操作中的基石。
public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5 }; System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); System.out.println(arr[3]); System.out.println(arr[4]); }
以上代碼是可以將數組中每個元素全部遍歷出來,但是如果數組元素非常多,這種寫法肯定不行,因此我們需要改造成循環的寫法。數組的索引是0
到length-1
,可以作爲循環條件出現。
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
五、數組獲取最大值元素
-
**最大值獲取:**從數組的所有元素中找出最大值。
-
實現思路:
- 定義變量,保存數組0索引上的元素
- 遍歷數組,獲取出數組中的每個元素
- 將遍歷到的元素和保存數組0索引上值的變量進行比較
- 如果數組元素的值大於了變量的值,變量記錄住新的值
- 數組循環遍歷結束,變量保存的就是數組中的最大值
public static void main(String[] args) {
int[] arr = { 5, 15, 2000, 10000, 100, 4000 };
//定義變量,保存數組中0索引的元素
int max = arr[0];
//遍歷數組,取出每個元素
for (int i = 0; i < arr.length; i++) {
//遍歷到的元素和變量max比較
//如果數組元素大於max
if (arr[i] > max) {
//max記錄住大值
max = arr[i];
}
}
System.out.println("數組最大值是: " + max);
}
1、實例
public class Demo11ArrayMax {
public static void main(String[] args) {
int[] array = {5, 15, 30, 20, 10000, 35};
int max = array[0]; //比武擂臺
for (int i=1; i<array.length; i++) {
//如果當前元素比max更大,則換人
if(array[i]>max) {
max = array[i];
}
}
//誰最後最厲害,就能在max當中留下誰的戰鬥力
System.out.println("最大值:" + max);
}
}
public class Demo12ArrayMin {
public static void main(String[] args) {
int[] array = {5, 15, 30, 20, 10000, 35};
int min = array[0];
for (int i=1; i<array.length; i++) {
//如果當前元素比min更小,則換人
if(array[i]<min) {
min = array[i];
}
}
System.out.println("最小值:" + min);
}
}
六、數組反轉
-
**數組的反轉:**數組中的元素顛倒,例如原始數組爲1,2,3,4,5,反轉後的數組爲5,4,3,2,1
-
**實現思想:**數組最遠端的元素互換位置
- 實現反轉,就需要將數組最遠端元素位置交換
- 定義兩個變量,保存數組的最小索引和最大索引
- 兩個索引上的元素交換位置
- 最小索引++,最大索引–,再次交換位置
- 最小索引超過了最大索引,數組反轉操作結束
1、實例
/*
數組元素的反轉
本來的樣子:[1, 2, 3, 4]
之後的樣子:[4, 3, 2, 1]
要求:不能使用新數組,就永遠來的唯一一個數組
*/
public class Demo13ArrayReverse {
public static void main(String[] args) {
int[] array = {10, 20, 30, 40, 50};
//遍歷打印數組本來的樣子
for (int i=0; i<array.length; i++) {
System.out.println(array[i]);
}
System.out.println("==========");
/*
初始化語句:int min = 0, max = array.length - 1
條件判斷:min < max
步進表達式:min++, max--
循環體: 用第三個變量倒手
*/
for (int min=0, max=array.length-1; min<max; min++, max--) {
int temp = array[min];
array[min] = array[max];
array[max] = temp;
}
//再次打印遍歷輸出數組後來的樣子
for (int i=0; i<array.length; i++) {
System.out.println(array[i]);
}
}
}