---
# System prepended metadata

title: 'Java 學習筆記 - 3-2: 多維陣列 Multidimensional Array'
tags: [Java 學習筆記]

---

###### tags: `Java 學習筆記`
# Java 學習筆記 - 3-2: 多維陣列 Multidimensional Array

## 定義
由「列 (Row)」與「行 (Column)」組合而成


| Column 1 | Column 2 | Column 3 |
| -------- | -------- | -------- |
| Text     | Text     | Text     |
| Text     | Text     | Text     |

一維陣列代表一列

## 宣告
```java=
int arr[][] = new int[3][4];
```
Or
```java=
int[][] arr = new int[3][4];
```
* 可以先宣告第一個而不宣告第二個，但不可以不宣告第一個就宣告第二個
* heap 裡有三個長度為四的空間，需要用巢狀（雙層）迴圈來處理
* steak 裡存著一維陣列的位置，會連到一個有三個長度的一維陣列，該陣列每一格各自對應那三個長度為四的陣列位置
* java 獨有
```java=
int arr[][] = new int[3][4];
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        arr[i][j] = j + 1;
    }
}
```
### 用迴圈寫入內容
```java=
int arr[][] = new int[3][];
for (int i = 0; i < 3; i++) {
    arr[i] = new int[i + 1];
}
```
* 第 0 格會存放長度為 1 的陣列的位置，以此類推
```java=
int arr[][] = new int[3][];
for (int i = 0; i < 3; i++) {
    arr[i] = new int[i + 1];
}
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < i + 1; j++) {
        arr[i][j] = j + 1;
    }
}
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < i + 1; j++) {
        System.out.print(arr[i][j] + " ");
    }
    System.out.println();
}
```
* 二維陣列中 arr.length = Row 的長度
* 二維陣列中 arr[i].length = Column 的長度

### 寫入內容範例: 學生成績
```java=
Scanner sc = new Scanner(System.in);
int arr[][] = new int[2][3];
for (int i = 0; i < arr.length; i++) {
    System.out.println("請輸入 " + (i + 1) + " 的成績");
    for (int j = 0; j < arr[i].length; j++) {
        int score;
        do {
            System.out.print("成績 " + (j + 1) + " 為");
            score = sc.nexInt();
        } while (score < 0 || score > 100);
        arr[i][j] = score;
    }
}
```