陣列
| 瀏覽 語言基礎 主題: |
一個陣列類似於一個物件的表格或基本型別,透過索引進行鍵控。您可能已經注意到從本書開始,預設main()方法(String[] args)的奇怪引數。它是一個數組。讓我們處理這個引數
|
|
在程式碼清單 3.15中,陣列是args。它是一個String物件的陣列(這裡這些物件是使用者在程式啟動時輸入的單詞)。在第 4 行,一個包含的物件透過其在陣列中的索引進行訪問。您可以看到它的值被列印到標準輸出。請注意,字串已按正確順序放入陣列中。
在 Java 中,陣列是一個物件。該物件對包含的基本型別或物件(int、char、String 等)具有給定的型別。陣列可以透過多種方式宣告
程式碼部分 3.52:陣列宣告。
int[] array1 = null;
int array2[] = null;
|
這些語法是相同的,但第一個語法是推薦的。它也可以透過多種方式例項化
程式碼部分 3.53:陣列例項化。
array1 = new int[10];
int[] array0 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //this only works in the declaration
array1 = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
|
在第 1 行,我們例項化了一個包含 10 個專案的陣列,這些專案獲得預設值(對於int來說是 0)。在第 2 行和第 3 行,我們例項化了包含 10 個給定專案的陣列。每個專案都將根據其順序獲得一個索引。我們可以使用length屬性來了解陣列的大小
|
|
陣列在執行時分配,因此在陣列建立表示式中指定的尺寸可以是變數(而不是像 C 中那樣的常量表達式)。但是,例項化陣列的尺寸永遠不會改變。如果需要改變尺寸,則必須建立一個新的例項。專案可以透過其索引進行訪問。注意!第一個索引是 0
|
|
如果您嘗試訪問過高的索引或負索引,將會得到一個ArrayIndexOutOfBoundsException。
問題 3.20:考慮以下程式碼
問題 3.20:Question20.java
public class Question20 {
public static void main(String[] args) {
String[] listOfWord = {"beggars", "can't", "be", "choosers"};
System.out.println(listOfWord[1]);
System.out.println(listOfWord[listOfWord.length-1]);
}
}
|
在標準輸出中會列印什麼內容?
問題 3.20 的輸出
can't choosers |
索引從 0 開始。因此索引 1 指向第二個字串(can't)。共有 4 個專案,因此陣列的大小為 4。因此,索引 3 指向的專案是最後一個專案(choosers)。
實際上,Java 中沒有二維陣列。但是,陣列可以包含任何型別的物件,包括陣列
程式碼部分 3.56:二維陣列。
String[][] twoDimArray = {{"a", "b", "c", "d", "e"},
{"f", "g", "h", "i", "j"},
{"k", "l", "m", "n", "o"}};
int[][] twoDimIntArray = {{ 0, 1, 2, 3, 4},
{10, 11, 12, 13, 14},
{20, 21, 22, 23, 24}};
|
它並不完全等同於二維陣列,因為子陣列的大小可能不同。子陣列引用甚至可以為空。考慮一下
程式碼部分 3.57:奇怪的二維陣列。
String[][] weirdTwoDimArray = {{"10", "11", "12"},
null,
{"20", "21", "22", "23", "24"}};
|
請注意,二維陣列的長度是它包含的一維陣列的數量。在上面的例子中,weirdTwoDimArray.length 是 3,而 weirdTwoDimArray[2].length 是 5。
在程式碼部分 3.58中,我們定義了一個包含三個元素的陣列,每個元素都包含一個包含 5 個元素的陣列。我們可以先建立包含 5 個元素的陣列,然後在初始化塊中使用它。
程式碼部分 3.58:包含的陣列。
String[] oneDimArray = {"00", "01", "02", "03", "04"};
String[][] twoDimArray = {oneDimArray,
{"10", "11", "12", "13", "14"},
{"20", "21", "22", "23", "24"}};
|
問題 3.21:考慮以下程式碼
問題 3.21:字母表。
String[][] alphabet = {{"a", "b", "c", "d", "e"},
{"f", "g", "h", "i", "j"},
{"k", "l", "m", "n", "o"},
{"p", "q", "r", "s", "t"},
{"u", "v", "w", "x", "y"},
{"z"}};
|
在標準輸出中列印整個字母表。
問題 3.21:Answer21.java
public class Answer21 {
public static void main(String[] args) {
String[][] alphabet = {{"a", "b", "c", "d", "e"},
{"f", "g", "h", "i", "j"},
{"k", "l", "m", "n", "o"},
{"p", "q", "r", "s", "t"},
{"u", "v", "w", "x", "y"},
{"z"}};
for (int i = 0; i < alphabet.length; i++) {
for (int j = 0; j < alphabet[i].length; j++) {
System.out.println(alphabet[i][j]);
}
}
}
}
|
i 將是主陣列的索引,j 將是所有子陣列的索引。我們必須先遍歷主陣列。我們必須讀取陣列的大小。然後,我們遍歷每個子陣列。我們必須讀取每個陣列的大小,因為它可能不同。這樣做,我們使用索引遍歷所有子陣列專案。所有專案將按正確順序讀取。
可以定義任意數量的維陣列。
| elementType[][]...[] arrayName |
或
| elementType arrayName[][]...[] |