跳轉到內容

陣列

100% developed
來自華夏公益教科書,自由的教科書,用於開放的世界

瀏覽 語言基礎 主題:v  d  e )

一個陣列類似於一個物件的表格或基本型別,透過索引進行鍵控。您可能已經注意到從本書開始,預設main()方法(String[] args)的奇怪引數。它是一個數組。讓我們處理這個引數

Computer code 程式碼清單 3.15:預設陣列引數。
public class ArrayExample {
  public static void main(String[] args) {
    for (int i = 0; i < args.length; ++i) {
      System.out.println("Argument #" + (i + 1) + ": " + args[i]);
    }
  }
}
Computer code 程式碼清單 3.15 的控制檯
$ java ArrayExample This is a test
Argument #1 This
Argument #2 is
Argument #3 a
Argument #4 test

程式碼清單 3.15中,陣列是args。它是一個String物件的陣列(這裡這些物件是使用者在程式啟動時輸入的單詞)。在第 4 行,一個包含的物件透過其在陣列中的索引進行訪問。您可以看到它的值被列印到標準輸出。請注意,字串已按正確順序放入陣列中。

基礎知識

[編輯 | 編輯原始碼]

在 Java 中,陣列是一個物件。該物件對包含的基本型別或物件(intcharString 等)具有給定的型別。陣列可以透過多種方式宣告

Example 程式碼部分 3.52:陣列宣告。
int[] array1 = null;
int array2[] = null;

這些語法是相同的,但第一個語法是推薦的。它也可以透過多種方式例項化

Example 程式碼部分 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屬性來了解陣列的大小

Example 程式碼部分 3.54:陣列大小。
int nbItems = 10;
Object[] array3 = new Object[nbItems];
System.out.println(array3.length);
Computer code 程式碼部分 3.54 的輸出
10

陣列在執行時分配,因此在陣列建立表示式中指定的尺寸可以是變數(而不是像 C 中那樣的常量表達式)。但是,例項化陣列的尺寸永遠不會改變。如果需要改變尺寸,則必須建立一個新的例項。專案可以透過其索引進行訪問。注意!第一個索引是 0

Example 程式碼部分 3.55:陣列索引。
char[] array4 = {'a', 'b', 'c', 'd', 'e'};
System.out.println(array4[2]);
array4[4] = 'z';
System.out.println(array4[4]);
Computer code 程式碼部分 3.55 的輸出
c
z

如果您嘗試訪問過高的索引或負索引,將會得到一個ArrayIndexOutOfBoundsException

測試您的知識

問題 3.20:考慮以下程式碼

Computer code 問題 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]);
  }
}

在標準輸出中會列印什麼內容?

答案
Computer code 問題 3.20 的輸出
can't
choosers

索引從 0 開始。因此索引 1 指向第二個字串(can't)。共有 4 個專案,因此陣列的大小為 4。因此,索引 3 指向的專案是最後一個專案(choosers)。

二維陣列

[編輯 | 編輯原始碼]

實際上,Java 中沒有二維陣列。但是,陣列可以包含任何型別的物件,包括陣列

Example 程式碼部分 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}};

它並不完全等同於二維陣列,因為子陣列的大小可能不同。子陣列引用甚至可以為空。考慮一下

Example 程式碼部分 3.57:奇怪的二維陣列。
String[][] weirdTwoDimArray = {{"10", "11", "12"},
                               null,
                               {"20", "21", "22", "23", "24"}};

請注意,二維陣列的長度是它包含的一維陣列的數量。在上面的例子中,weirdTwoDimArray.length 是 3,而 weirdTwoDimArray[2].length 是 5。

程式碼部分 3.58中,我們定義了一個包含三個元素的陣列,每個元素都包含一個包含 5 個元素的陣列。我們可以先建立包含 5 個元素的陣列,然後在初始化塊中使用它。

Example 程式碼部分 3.58:包含的陣列。
String[] oneDimArray = {"00", "01", "02", "03", "04"};
String[][] twoDimArray = {oneDimArray,
                          {"10", "11", "12", "13", "14"},
                          {"20", "21", "22", "23", "24"}};
測試您的知識

問題 3.21:考慮以下程式碼

Example 問題 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"}};

在標準輸出中列印整個字母表。

答案
Computer code 問題 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[][]...[]


華夏公益教科書