008 java中陣列的使用方法
陣列的介紹(參考博文http://c.biancheng.net/view/5852.html)
概念:陣列有一維陣列,二維陣列和多維陣列,是一種複合資料型別(也是引用資料型別),一個數組中的每一個元素具有相同的資料型別,具有一致性,有序性和不可變性。
組成:陣列名,下標(索引),元素,陣列的長度
(注意:陣列的索引從0開始)
陣列的長度一旦確定不能修改
舉例:
file新建工程---src建立包.java-----再在包下建立類ArrayTest.java
一:一維陣列:
(1)一維陣列的宣告和初始化
在程式中如果想要使用陣列,必須先聲明後使用
01.宣告:
type[] arrayName; //資料型別[] 陣列名;
在宣告陣列時,不需要規定陣列的長度
int score[10]; // 這是錯誤的
02.分配記憶體空間--初始化
(分配空間就是要告訴計算機在記憶體中為它分配幾個連續的位置來儲存資料。在 Java 中可以使用 new 關鍵字來給陣列分配空間)
arrayName = new type[size]; // 陣列名 = new 資料型別[陣列長度];
陣列長度表明陣列中能夠存放的陣列元素個數。
例如:
- score = new int[10];
- price = new double[30];
- name = new String[20];
也可以在宣告陣列時就給它分配空間,語法格式如下:
type[] arrayName = new type[size]; // 資料型別[] 陣列名 = new 資料型別[陣列長度];
例如,宣告並分配一個長度為 5 的 int 型別陣列 arr,程式碼如下:
int[] arr = new int[5];
注意:一旦聲明瞭陣列的大小不能修改。
03.初始化--為每一個元素賦值
Java中的陣列必須先初始化,才能使用。
例1:建立包含 5 個元素的 int 型別的陣列,然後分別將元素的值設定為 1、2、3、5 和 8。程式碼如下:
int[] number = new int[5]; number[0] = 1; number[1] = 2; number[2] = 3; number[3] = 5; number[4] = 8;
例2:使用 new 指定陣列元素的值
type[] arrayName = new type[]{值 1,值 2,值 3,值 4,• • •,值 n};
更改例 1中的程式碼,使用 new 直接指定陣列元素的值
int[] number = new int[]{1, 2, 3, 5, 8};
注意:不要在進行陣列初始化時,既指定陣列的長度,也為每個陣列元素分配初始值,這樣會造成程式碼錯誤。例如下面程式碼:
int[] number = new int [5] {1,2,3,4,5}; //這是錯誤的
04.獲取單個元素
獲取單個元素是指獲取陣列中的一個元素,如第一個元素或最後一個元素。獲取單個元素指定元素所在陣列的下標即可。
arrayName[index]; //arrayName:陣列變數 //index表示下標
例1:
//獲取 number 陣列中的第一個元素、最後一個元素和第六個元素,並將元素的值輸出。 int[] number = {1,2,3,5,8}; System.out.println("獲取第一個元素:"+number[0]); System.out.println("獲取最後一個元素:"+number[number.length-1]); System.out.println("獲取第6個元素:"+number[5])
執行上述程式碼,輸出結果如下所示:
獲取第一個元素:1 獲取最後一個元素:8 java.lang.ArrayIndexOutOfBoundsException: 5
我們一共存入了 5 個值,所以下標的取值為 0~4。因為 number[5] 取出的內容超過了這個下標,所以輸出結果會提示陣列索引超出繫結異常(ArrayIndexOutOfBoundsException)。這一點是在使用陣列中是經常出現的問題,大家在編寫程式時應該引起注意。
例2:編寫一個 Java 程式,使用陣列存放錄入的 5 件商品價格,然後使用下標訪問第 3 個元素的值。
import java.util.Scanner; public class Test06 { public static void main(String[] args) { int[] prices = new int[5]; // 宣告陣列並分配空間 Scanner input = new Scanner(System.in); // 接收使用者從控制檯輸入的資料 for (int i = 0; i < prices.length; i++) { System.out.println("請輸入第" + (i + 1) + "件商品的價格:"); prices[i] = input.nextInt(); // 接收使用者從控制檯輸入的資料 } System.out.println("第 3 件商品的價格為:" + prices[2]); } }
上述程式碼的“int[] prices = new int[5]”語句建立了需要 5 個元素空間的 prices 陣列,然後結合 for 迴圈向陣列中的每個元素賦值。
注意:在 Java 中取得陣列的長度(也就是陣列元素的長度)可以利用“陣列名稱.length”,返回一個 int 型資料。
陣列的索引從 0 開始,而 for 迴圈中的變數 i 也從 0 開始,因此 score 陣列中的元素可以使用 scored 來表示,大大簡化了程式碼。最後使用 prices[2] 獲取 prices 陣列的第 3 個元素,最終執行效果如下所示。
請輸入第1件商品的價格: 5 請輸入第2件商品的價格: 4 請輸入第3件商品的價格: 6 請輸入第4件商品的價格: 4 請輸入第5件商品的價格: 8 第 3 件商品的價格為:6
05.獲取全部元素
當陣列中的元素數量不多時,要獲取陣列中的全部元素,可以使用下標逐個獲取元素。但是,如果陣列中的元素過多,再使用單個下標則顯得煩瑣,此時使用一種簡單的方法可以獲取全部元素——使用迴圈語句。
下面利用 for 迴圈語句遍歷 number 陣列中的全部元素,並將元素的值輸出。程式碼如下:
int[] number = {1,2,3,5,8}; for (int i=0;i<number.length;i++) { System.out.println("第"+(i+1)+"個元素的值是:"+number[i]); }
還可以使用 foreach 遍歷陣列中的元素,並將元素的值輸出。程式碼如下:
for(int val:number) { System.out.print("元素的值依次是:"+val+"\t"); }
(2)二維陣列的宣告和初始化
(原博文地址:http://c.biancheng.net/view/5857.html)
01.概念
二維陣列被看作陣列的陣列,即二維陣列為一個特殊的一維陣列,其每個元素又是一個一維陣列。Java 並不直接支援二維陣列,但是允許定義陣列元素是一維陣列的一維陣列,以達到同樣的效果。
02.建立(聲名)
//宣告方法一 //第一個中括號表示行,第二個中括號表示列。 type arrayName[][]; // 資料型別 陣列名[][]; //宣告方法二 type[][] arrayName; // 資料型別[][] 陣列名;
例:下面分別宣告 int 型別和 char 型別的陣列
int[][] age; char[][] sex;
03.初始化
二維陣列可以初始化,和一維陣列一樣,可以通過 3 種方式來指定元素的初始值。
type[][] arrayName = new type[][]{值 1,值 2,值 3,…,值 n}; // 在定義時初始化 type[][] arrayName = new type[size1][size2]; // 給定空間,在賦值 type[][] arrayName = new type[size][]; // 陣列第二維長度為空,可變化
例1:使用三種方式宣告 int 型別的二維陣列,然後初始化該二維陣列
//使用第一種方式宣告 int 型別的二維陣列,然後初始化該二維陣列 int[][] temp = new int[][]{{1,2},{3,4}}; //使用第二種方式宣告 int 型別的二維陣列,然後初始化該二維陣列 int[][] temp = new int[2][2]; //使用第三種方式宣告 int 型別的二維陣列,並且初始化陣列 int[][] temp = new int[2][];
04.獲取單個元素
在上部分使用的前 2 種方式建立並初始化了一個二行二列的 int 型別陣列 temp。
當需要獲取二維陣列中元素的值時,也可以使用下標來表示
例如,要獲取第二行第二列元素的值,應該使用 temp[1][1]來表示。
由於陣列的下標起始值為 0,因此行和列的下標需要減 1。
arrayName[i-1][j-1];
例1 .通過下標獲取 class_score 陣列中第二行第二列元素的值與第四行第一列元素的值
public static void main(String[] args) { double[][] class_score = {{10.0,99,99},{100,98,97},{100,100,99.5},{99.5,99,98.5}}; System.out.println("第二行第二列元素的值:"+class_score[1][1]); System.out.println("第四行第一列元素的值:"+class_score[3][0]); }
執行上述程式碼,輸出結果如下:
第二行第二列元素的值:98.0 第四行第一列元素的值:99.5
05.獲取全部元素
一維陣列中直接使用陣列的 length 屬性獲取陣列元素的個數;
在二維陣列中,直接使用 length 屬性獲取的是陣列的行數,在指定的索引後加上 length(如 array[0].length)表示的是該行擁有多少個元素,即列數。
如果要獲取二維陣列中的全部元素,最簡單、最常用的辦法就是使用 for 語句。在一維陣列全部輸出時,我們使用一層 for 迴圈,而二維陣列要想全部輸出,則使用巢狀 for 迴圈(2 層 for 迴圈)。
例1:使用 for 迴圈語句遍歷 double 型別的 class_score 陣列的元素,並輸出每一行每一列元素的值。程式碼如下:
public static void main(String[] args) { double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } }; // 遍歷行 for (int i = 0; i < class_score.length; i++) { //遍歷列 for (int j = 0; j < class_score[i].length; j++) { System.out.println("class_score[" + i + "][" + j + "]=" + class_score[i][j]); } } }
執行上述程式碼,輸出結果如下所示。
class_score[0][0]=100.0 class_score[0][1]=99.0 class_score[0][2]=99.0 class_score[1][0]=100.0 class_score[1][1]=98.0 class_score[1][2]=97.0 class_score[2][0]=100.0 class_score[2][1]=100.0 class_score[2][2]=99.5 class_score[3][0]=99.5 class_score[3][1]=99.0 class_score[3][2]=98.5
例2:假設有一個矩陣為 5 行 5 列,該矩陣是由程式隨機產生的 10 以內數字排列而成。下面使用二維陣列來建立該矩陣
public class Test11 { public static void main(String[] args) { // 建立一個二維矩陣 int[][] matrix = new int[5][5]; // 隨機分配值 for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { matrix[i][j] = (int) (Math.random() * 10); } } System.out.println("下面是程式生成的矩陣\n"); // 遍歷二維矩陣並輸出 for (int k = 0; k < matrix.length; k++) { for (int g = 0; g < matrix[k].length; g++) { System.out.print(matrix[k][g] + ""); } System.out.println(); } } }
首先定義了一個二維陣列,然後使用兩個巢狀的 for 迴圈向二維陣列中的每個元素賦值。其中,Math.random() 方法返回的是一個 double 型別的數值,數值為 0.6、0.9 等,因此乘以 10 之後為 10 以內的整數。最後又使用了兩個巢狀的 for 迴圈遍歷二維陣列,輸出二維陣列中的值,從而產生矩陣。
執行該程式的結果如下所示。
下面是程式生成的矩陣 78148 69230 43823 75663 05688
for each 迴圈語句不能自動處理二維陣列的每一個元素。它是按照行, 也就是一維陣列處理的。要想訪問二維教組 a 的所有元素, 需要使用兩個巢狀的迴圈, 如下所示:
for (double[] row : a) { for (double value : row) { ...... } }
06.獲取整行元素
除了獲取單個元素和全部元素之外,還可以單獨獲取二維陣列的某一行中所有元素的值,或者二維陣列中某一列元素的值。獲取指定行的元素時,需要將行數固定,然後只遍歷該行中的全部列即可。
例:編寫一個案例,接收使用者在控制檯輸入的行數,然後獲取該行中所有元素的值。
public static void main(String[] args) { double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } }; Scanner scan = new Scanner(System.in); System.out.println("當前陣列只有" + class_score.length + "行,您想檢視第幾行的元素?請輸入:"); int number = scan.nextInt(); for (int j = 0; j < class_score[number - 1].length; j++) { System.out.println("第" + number + "行的第[" + j + "]個元素的值是:" + class_score[number - 1][j]); } }
執行上述程式碼進行測試,輸出結果如下所示。
當前陣列只有4行,您想檢視第幾行的元素?請輸入: 3 第3行的第[0]個元素的值是:100.0 第3行的第[1]個元素的值是:100.0 第3行的第[2]個元素的值是:99.5
07.獲取整列元素
獲取指定列的元素與獲取指定行的元素相似,保持列不變,遍歷每一行的該列即可。
例編寫一個案例,接收使用者在控制檯中輸入的列數,然後獲取二維陣列中所有行中該列的值。
public static void main(String[] args) { double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } }; Scanner scan = new Scanner(System.in); System.out.println("您要獲取哪一列的值?請輸入:"); int number = scan.nextInt(); for (int i = 0; i < class_score.length; i++) { System.out.println("第 " + (i + 1) + " 行的第[" + number + "]個元素的值是" + class_score[i][number]); } }
執行上述程式碼進行測試,如下所示。
您要獲取哪一列的值?請輸入: 2 第 1 行的第[2]個元素的值是99.0 第 2 行的第[2]個元素的值是97.0 第 3 行的第[2]個元素的值是99.5 第 4 行的第[2]個元素的值是98.5