# Java第13週[JPA503~505 %02d、陣列指定初始值+函數運用、費氏數列、反轉陣列]
#### 複習用
## 開始解題(JPA503~505):
### 第一題(JPA503)-矩陣之和[使用 %02d、陣列指定初始值+函數運用]:
#### [A.length 和 A[i].length 的差別](https://blog.csdn.net/qq_40723205/article/details/79763534)
```java=1
int [][]A=new int [2][3];
//矩陣:
int [][]A={{1,2,3},{4,5,6}}; //1 2 3 {}
// 00 01 02 10 11 12 //4 5 6 {}
A.length=2; //看大{}內的小{}有多少個,代表兩列
A[i].length //第i列的有多少元素
A[0]=3; //{1,2,3},共3個
A[1]=3; //{4,5,6},共3個
```
#### [%02d是什麼?](https://www.796t.com/post/ZmF2eQ==.html)
**[個位數字補0]**
至少2位十進制整數,如果數字小於或等於9
則第一個為零,不夠就補0
```java=1
System.out.printf("%02d ",i);
輸出結果:
01、02、03...09 //簡單來說就是 [個位數字補0]
10、11...
```
![](https://i.imgur.com/ieA0L1u.png)
解答:
```java
public class JPA051
{ //宣告兩個整數變數[全域型變數=>在主程式、函數也可以使用]
// final static int ROW = 2; //宣告二維陣列的[列數] final常數
// final static int COL = 3; //宣告二維陣列的[行數] final常數
public static void main(String args[])
{
int A[][] = {{1,2,3}, {4,5,6}}; //兩列三行
int B[][] = {{7,8,9}, {10,11,12}};
int C[][] = new int[2][3];
System.out.printf("陣列A的內容為(3x3):\n");
show(A);
System.out.printf("\n陣列B的內容為(3x3):\n");
show(B);
add(A, B, C);
System.out.printf("\n陣列A+B=C,陣列C的內容為(3x3):\n");
show(C);
}
public static void add(int[][] A,int[][] B,int[][] C)
{
for(int i=0;i<2;i++) //A.length(列數)
{
for(int j=0;j<3;j++) //A[i].length(行數)第i列有多少元素
{ //{{},{}}每一個{}內部有幾個元素
C[i][j]=A[i][j]+B[i][j];
}
}
}
public static void show(int [][]N) //列印陣列(A、B、C陣列都會進來)
{
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
System.out.printf("%02d ",N[i][j]); //%02d代表2bits輸出
} //自動補0
System.out.printf("\n");
}
}
}
```
---
### 第二題(JPA504)-費氏數列F[使用陣列+迴圈]:
#### [費氏數列](https://gn00466269.pixnet.net/blog/post/46545504)
程式語言中常見的遞迴
他的每一項分別是:
A0=0
A1=1
AN=A(N-1)+A(N-2)
也就是**A2以後**,**每一項的值**就是**前兩項的值相加**
使用**遞迴的方法**可以把費式數列的值做出來
![](https://i.imgur.com/uNkuU7Z.png)
解答:
```java
public class JPA051
{
public static void main(String[] args)
{
int[] F=new int[10]; //F[0]~F[9],共10個
F[0]=0;
F[1]=1;
//注意迴圈 初始i是2
for(int i=2;i<F.length;i++) //計算
{
F[i]=F[i-1]+F[i-2]; //F[2]=F[1]+F[0]
}
for(int i=0;i<F.length;i++) //輸出
{
System.out.printf("%d\n",F[i]);
}
}
}
```
加上**例外處理**的解答:
```java
public class JPA051
{
public static void main(String[] args) throws ArrayIndexOutOfBoundsException
{
try
{
int[] F=new int[10];
F[0]=0;
F[1]=1;
for(int i=2;i<F.length;i++) //計算
{
F[i]=F[i-1]+F[i-2];
}
for(int i=0;i<=F.length;i++) //輸出
{
System.out.printf("%d\n",F[i]); //OutOfBoundsException
} //迴圈範圍錯誤
} //代表陣列存取超出範圍
catch(ArrayIndexOutOfBoundsException ie) //改成i <= F.length會產生OutofBound例外訊息
{
System.out.println("陣列存取超出範圍,迴圈範圍錯誤"+ie);
}
}
}
```
---
### 第三題(JPA505)-反轉陣列[使用陣列交換]:
#### 反轉:
![](https://i.imgur.com/LBo3KZe.png)
```java=1
public static void reverse(String[]N)
{
String temp;
for(int i=0;i<N.length/2;i++) //做5次交換(看上圖的線,代表5次交換)
{
temp=N[i]; //temp=A //原先N[0]的值會被蓋掉
N[i]=N[(N.length-1)-i]; //N[0]=J //所以用Temp先接住
N[(N.length-1)-i]=temp; //N[9]=A //達到A、J交換
}
}
```
![](https://i.imgur.com/VqNTQOO.png)
解答:
```java
public class JPA051
{
public static void main(String[] argv)
{
String[] data = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"}; //宣告一維字元陣列data,共10個元素
System.out.print("反轉陣列資料之前: ");
for(int i=0;i<data.length;i++)
{
System.out.printf("%s ",data[i]);
}
System.out.printf("\n");
reverse(data);
System.out.print("反轉陣列資料之後: ");
for(int i=0;i<data.length;i++)
{
System.out.printf("%s ",data[i]);
}
System.out.printf("\n");
}
public static void reverse(String[]N)
{
String temp;
for(int i=0;i<N.length/2;i++) //做5次交換
{
temp=N[i]; //temp=A
N[i]=N[(N.length-1)-i]; //N[0]=J
N[(N.length-1)-i]=temp; //N[9]=A
}
}
}
```
### 額外延伸
#### 泡沫排序法:
將數字 **由小排到大** 或 **由大排到小**
[[泡沫排序法1]](https://www.itread01.com/content/1546396767.html)
[[泡沫排序法2]](https://pjchender.blogspot.com/2017/09/bubble-sort.html)
---
最後編輯時間:2021/5/23 9:48pm.
###### tags: `JAVA課堂學習` `複習用` `高科大`