# Java第14週 >範圍 **JPA506~508** >==三維陣列元素之和==[color=#EA0000] >==停車費用計算==[color=#EA0000] >==泡沫排序法== (泡泡排序法)[color=#EA0000] #### 複習用 >:::spoiler **文章目錄** >[TOC] >::: ## 開始解題 ### 💡==第一題== (JPA506) ### <font color=#984B4B>三維陣列元素之和</font> >使用 **陣列宣告+for迴圈用運** #### 陣列宣告 >一維陣列 ```java=1 int []A=new int[4];//陣列標準寫法 (記憶體空間[長度]為4) int []A={1,2,3,4}; //指定初始值寫法 A[0]=1; A[1]=2; A[2]=3; A[3]=4; ``` >二維陣列 ```java=1 int [][]A=new int[4][2];//陣列標準寫法 (記憶體空間[長度]為4、[寬度]為2) int [][]A={{1,2},{3,4},{5,6},{7,8}}; //指定初始值寫法 A[0][0]=1; A[0][1]=2; A[1][0]=3; A[1][1]=4; A[2][0]=5; A[2][1]=6; A[3][0]=7; A[3][1]=8; ``` >三維陣列 ```java //陣列標準寫法 (記憶體空間[長度]為4、[寬度]為2、[高度]為3) int [][][]A=new int[4][2][3]; //指定初始值寫法 int [][][]A={ { {1,2,3},{4,5,6} },{ {7,8,9},{10,11,12} },{ {13,14,15},{16,17,18} },{ {19,20,21},{22,23,24} } }; A[0][0][0]=1; A[0][0][1]=2; A[0][0][2]=3; A[0][1][0]=4; A[0][1][1]=5; A[0][1][2]=6; A[1][0][0]=7; A[1][0][1]=8; A[1][0][2]=9; A[1][1][0]=10; A[1][1][1]=11; A[1][1][2]=12; A[2][0][0]=13; A[2][0][1]=14; A[2][0][2]=15; A[2][1][0]=16; A[2][1][1]=17; A[2][1][2]=18; A[3][0][0]=19; A[3][0][1]=20; A[3][0][2]=21; A[3][1][0]=22; A[3][1][1]=23; A[3][1][2]=24; ``` >**結論**[color=#EA0000] 以 ==二維陣列== 為例 如果是 **指定初始值寫法** 可以這樣看 ```java=1 // 00 01 10 11 20 21 30 31 int [][]A={{1,2},{3,4},{5,6},{7,8}}; ``` 如果 **從後面往前看** (算括號) ```java=1 int [][]A=new int[4][2] //[2]後面 代表 {}最裡面 個數 //[4]前面 代表 {}最外面 個數 int [][]A={ {1,2},{3,4},{5,6},{7,8} }; // 1 2 1 2 1 2 1 2 // 1 2 3 4 ``` >由此可知,==最後一個維度== 即為 =={ }最內部的值==[color=#EA0000] --- ### 📌==題目== ![](https://i.imgur.com/XNce2w1.png) **:paperclip: 解答:** ```java public class JPA051 { public static void main(String[] argv) { int sum =0;//宣告一個整數,計算總和 int A[][][] = {{{1,2,3},{4,5,6}}, //宣告一個三維陣列(4*2*3) {{7,8,9},{10,11,12}}, //並指定初值,共24個元素 {{13,14,15},{16,17,18}}, //指定值宣告要記得三個{}(最外層再一個{}) {{19,20,21},{22,23,24}}}; // A[0][0][0]=1; // A[0][0][1]=2; //... //A[3][1][2]=24; //A[4][2][3] 不存在(超出存取範圍) outofbound //搭配3層for loop存取整個陣列 for(int i=0;i<A.length;i++) //4 A.length第一個維度 { for(int j=0;j<A[i].length;j++) //2 A[i].length第二個維度 { for(int k=0;k<A[i][j].length;k++) //3 { //A[i][j].length第三個維度 sum+=A[i][j][k]; //累加 } } } System.out.printf("sum = %d\n", sum); } } ``` :::spoiler **速解** ```java=1 public class JPA05 { public static void main(String args[]) { //注意別變成 int [4][2][3]A 指定空間!!! int [][][]A={{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}},{{13,14,15},{16,17,18}},{{19,20,21},{22,23,24}}}; int sum=0; for(int i=0;i<4;i++) { for(int j=0;j<2;j++) { for(int k=0;k<3;k++) { sum+=A[i][j][k]; } } } System.out.println("sum = "+sum); } } ``` ::: --- ### 💡==第二題== (JPA507) ### <font color=#984B4B>停車費用計算</font> >使用 **???** #### [改寫:](https://happyplayblogs.blogspot.com/2015/05/tqc-java6-507.html) ##### 原先 ```java=1 for(int i=0;i<3;i++) { if(hours<=(hourTable[i+1]-hourTable[i])) { fee+=hours*feeTable[i]; hours=0; } else { fee+=(hourTable[i+1]-hourTable[i])*feeTable[i]; hours-=hourTable[i+1]-hourTable[i]; } } fee+=hours*feeTable[3]; ``` ##### 簡寫 ```java=1 for(int i=3;i>=0;i--) { if(hours>hourTable[i]) { fee+=(hours-hourTable[i])*feeTable[i]; hours=hourTable[i]; } } ``` --- ### 📌==題目== ![](https://i.imgur.com/DOg3iG2.png) :paperclip: **原先解答:** ```java public class JPA051 { public static void main(String[] argv) { int hours = 0; //停車時數 hours = 2; //2*30 park(hours); System.out.println("--------------------"); hours = 3; //2*30+1*50 park(hours); System.out.println("--------------------"); hours = 5; //2*30+2*50+1*80 park(hours); System.out.println("--------------------"); hours = 8; park(hours); } public static void park(int hours) { int[] hourTable = {0, 2, 4, 6}; // 時段(不同的區間) int[] feeTable = {30, 50, 80, 100}; // 時段費率 System.out.println("停車時數:"+hours+"小時"); int fee = 0; //停車費用 (用來計算費用) for(int i=0;i<3;i++) { if(hours<=(hourTable[i+1]-hourTable[i])) { fee+=hours*feeTable[i]; hours=0; } else { fee+=(hourTable[i+1]-hourTable[i])*feeTable[i]; hours-=hourTable[i+1]-hourTable[i]; } } fee+=hours*feeTable[3]; System.out.println("應繳費用:" + fee + "元整"); } } ``` :::spoiler **速解、簡寫解答** ```java public class JPA051 { public static void main(String[] argv) { int hours = 0; //停車時數 hours = 2; //2*30 park(hours); System.out.println("--------------------"); hours = 3; //2*30+1*50 park(hours); System.out.println("--------------------"); hours = 5; //2*30+2*50+1*80 park(hours); System.out.println("--------------------"); hours = 8; park(hours); } public static void park(int hours) { int[] hourTable = {0, 2, 4, 6}; // 時段(不同的區間) int[] feeTable = {30, 50, 80, 100}; // 時段費率 System.out.println("停車時數:"+hours+"小時"); int fee = 0; //停車費用 (用來計算費用) for(int i=3;i>=0;i--) { if (hours>hourTable[i]) { fee+=(hours-hourTable[i])*feeTable[i]; hours=hourTable[i]; } } System.out.println("應繳費用:" + fee + "元整"); } } ``` ::: --- ### 第三題(JPA508)-泡沫排序法(泡泡排序法)[使用]: #### [泡沫排序法](https://ced425.pixnet.net/blog/post/3252509) 兩兩相比,**較大的數往右移動** * **左右**左右**比較完一輪**(左小右大) ##### 舉例: 未排序資料 24357691 **[八個元素,需要7輪(n、n-1輪)]** 第一輪:23456719 (4、3 Swap)(7、6 Swap)(9、1 Swap) 第二輪:23456179 (7、1 Swap) 第三輪:23451679 (6、1 Swap) 第四輪:23415679 (5、1 Swap) 第五輪:23145679 (4、1 Swap) 第六輪:21345679 (3、1 Swap) 第七輪:12345679 (2、1 Swap) 未排序資料 857193246 **[九個元素,需要8輪]** 第一輪:571832469 (8、5 Swap)(8、7 Swap)(8、1 Swap)(9、3 Swap)(9、2 Swap)(9、4 Swap)(9、6 Swap) 第二輪:517324689 (7、1 Swap)(8、3 Swap)(8、2 Swap)(8、6 Swap)(8、6 Swap) 第三輪:153246789 (5、1 Swap)(7、3 Swap)(7、2 Swap)(7、4 Swap)(7、6 Swap) 第四輪:132456789 (5、3 Swap)(5、2 Swap)(5、4 Swap) 第五輪:123456789 (3、2 Swap) 第六輪:123456789 第七輪:123456789 第八輪:123456789 ![](https://i.imgur.com/Mxx8T99.png) 解答: ```java public class JPA051 { public static void main(String[] argv) { int[] data = {2, 4, 3, 5, 7, 6, 9, 1}; // 為排序的資料 int Temp=0; //泡泡排序法 兩兩相比,大的泡泡往上浮(較大的數往右移動) for(int i=0;i<data.length-1;i++) //7 //代表第幾輪 { //8個值共7輪 for(int j=0;j<data.length-1-i;j++) //7 { if(data[j]>data[j+1]) //一輪比較7次 { Temp=data[j]; data[j]=data[j+1]; //兩個元素交換 data[j+1]=Temp; //SWAP,標準寫法 } } //交換完一次,列印一輪 for(int k=0;k<data.length;k++) { //列印整個陣列,每一輪皆作列印的動作 System.out.print(data[k] ); } System.out.printf("\n"); } } } ``` --- :::spoiler 最後更新日期 >==第一版==[time=2021 6 17 , 1:45 AM][color=#786ff7] >第二版[time=2021 9 6 , 7:23 PM][color=#ce770c] >**最後版[time=2021 9 16 , 3:57 PM]**[color=#EA0000] ::: ###### tags: `JAVA課堂學習` `複習用` `高科大`