# Java第12週 ==額外題== #### 複習用 ## 開始解題 >額外題延伸-==**二維迴圈**的運用== ### 第一題 ### <font color=#984B4B>分別列出 學生各科成績+計算 各學生、各科 平均值:</font> >使用 **二維陣列**+**雙重for**迴圈 ### 📌題目: #### 宣告一個二維陣列,5列3行,要求使用者輸入5個學生3個科目的成績, #### 列出整個陣列內容,並計算每位學生的平均成績、每個科目的平均成績 ### <font color="##EE7700">💡簡化題目步驟 ### 五個學生,三個科目 **1. ==分別輸入==並==列出各學生各科成績== 2. 計算出 各學生 成績平均 (輸出結果第四行) 3. 計算出 各科 成績平均 (輸出結果第六列)** </font> ![](https://i.imgur.com/t2Ylp8B.png) :::spoiler **舊解答** ```java import java.util.Scanner; public class JPA051 { static Scanner keyboard=new Scanner(System.in); public static void main(String args[]) { int[][] score=new int[5][3]; //陣列宣告在外 for(int i=0;i<5;i++) //輸入score[i][j] { System.out.printf("請輸入第%d個學生\n",i+1); for(int j=0;j<3;j++) { System.out.printf("第%d個科目",j+1); score[i][j]=keyboard.nextInt();//將值一個一個輸入 } } int sum=0; for(int i=0;i<5;i++) //計算並輸出矩陣 { sum=0; //總和要清為0(代表每一位學生的平均) for(int j=0;j<3;j++) { System.out.printf("%d ",score[i][j]); //00 01 02 sum+=score[i][j]; } System.out.printf("%d ",sum/3); //多放一個(在04位子) System.out.printf("\n"); } int avg=0; for(int j=0;j<3;j++) //計算並輸出矩陣 { avg=0; //要清為0(代表每一個科目的平均) for(int i=0;i<5;i++) { avg+=score[i][j]; //五位學生總和 } System.out.printf("%d ",avg/5); } System.out.printf("\n"); } } ``` ::: <br> **:paperclip: 新解答:** ```java import java.util.Scanner; public class JPA0501 { static Scanner keyboard=new Scanner(System.in); public static void main(String args[]) { int [][]score=new int[5][3]; for(int i=0;i<5;i++) //1.輸入 { System.out.println("請輸入第"+(i+1)+"個學生"); for(int j=0;j<3;j++) { System.out.print("第"+(j+1)+"個科目 "); score[i][j]=keyboard.nextInt(); } } System.out.printf("\n"); int stuAvg=0; //1.列出所有、2.stuAvg for(int i=0;i<5;i++) { stuAvg=0; for(int j=0;j<3;j++) { System.out.printf("%d ",score[i][j]); stuAvg+=score[i][j]; } System.out.printf("%d",stuAvg/3); System.out.printf("\n"); } int subjectAvg=0; //3.subjectAvg for(int j=0;j<3;j++) { subjectAvg=0; for(int i=0;i<5;i++) { subjectAvg+=score[i][j]; } System.out.printf("%d ",subjectAvg/5); } System.out.printf("\n"); } } ``` --- ### 第二題 ### ==額外題 延伸1== >使用 **二維陣列**+**雙重for**迴圈+**if判斷** ### 📌題目: #### <font color=#984B4B>列出 每位學生 各有幾個科目及格、每個科目 各有幾個學生及格</font> ### <font color="##EE7700">💡簡化題目步驟 **1. ==分別輸入==並==列出各學生各科成績== 2. 列出每位學生各有[幾個]科目及格 3. 每個科目各有[幾個]學生及格** </font> :::spoiler **舊解答** ```java import java.util.Scanner; public class JPA052 { static Scanner keyboard=new Scanner(System.in); public static void main(String args[]) { int[][] score=new int [5][3]; for(int i=0;i<5;i++) { System.out.printf("請輸入第%d個學生\n",i+1); for(int j=0;j<3;j++) { System.out.printf("第%d個科目",j+1); score[i][j]=keyboard.nextInt(); } } int sum=0; for(int i=0;i<5;i++) { sum=0; for(int j=0;j<3;j++) { System.out.print(score[i][j]+" "); sum+=score[i][j]; } System.out.print(sum/3); System.out.printf("\n"); } int avg=0; for(int j=0;j<3;j++) { avg=0; for(int i=0;i<5;i++) { avg+=score[i][j]; } System.out.print(avg/5+" "); } System.out.print("\n"); int count=0; for(int i=0;i<5;i++) { count=0; for(int j=0;j<3;j++) { if(score[i][j]>=60) { count++; } } System.out.printf("第%d個學生 有%d個科目及格\n",i+1,count); } int count2=0; for(int j=0;j<3;j++) { count2=0; for(int i=0;i<5;i++) { if(score[i][j]>=60) { count2++; } } System.out.printf("第%d個科目 有%d個學生及格\n",j+1,count2); } } } ``` ::: <br> **:paperclip: 新解答:** ```java import java.util.Scanner; public class JPA0502 { static Scanner keyboard=new Scanner(System.in); public static void main(String args[]) { int [][]score=new int[5][3]; for(int i=0;i<5;i++) //1.輸入 { System.out.println("請輸入第"+(i+1)+"個學生"); for(int j=0;j<3;j++) { System.out.print("第"+(j+1)+"個科目 "); score[i][j]=keyboard.nextInt(); } } System.out.printf("\n"); int scorePass=0; for(int i=0;i<5;i++) //1.列出所有 { scorePass=0; for(int j=0;j<3;j++) { System.out.printf("%d ",score[i][j]); if(score[i][j]>=60) { scorePass++; } } System.out.printf("\n"); } System.out.printf("\n"); for(int i=0;i<5;i++) { System.out.printf("第%d位學生各有%d個科目及格\n",i+1,scorePass); } System.out.printf("\n"); int stuPass=0; for(int j=0;j<3;j++) { stuPass=0; for(int i=0;i<5;i++) { if(score[i][j]>=60) { stuPass++; } } System.out.printf("第%d個科目各有%d個及格學生\n",j+1,stuPass); } } } ``` --- ### 第三題 ### ==額外題延伸2== >使用 **二維陣列**+**雙重for**迴圈+**if判斷** ### 📌題目: #### <font color=#984B4B>列出 每位學生哪些科目及格、每個科目哪些學生及格(代碼)</font> ### <font color="##EE7700">💡簡化題目步驟 **1. ==分別輸入==並==列出各學生各科成績== 2. 列出每位學生[哪些]科目及格 3. 每個科目[哪些]學生及格** </font> :::spoiler **舊解答** ```java import java.util.Scanner; public class JPA053 { static Scanner keyboard=new Scanner(System.in); public static void main(String args[]) { int[][] score=new int [5][3]; for(int i=0;i<5;i++) { System.out.printf("請輸入第%d個學生\n",i+1); for(int j=0;j<3;j++) { System.out.printf("第%d個科目",j+1); score[i][j]=keyboard.nextInt(); } } int sum=0; for(int i=0;i<5;i++) { sum=0; for(int j=0;j<3;j++) { System.out.print(score[i][j]+" "); sum+=score[i][j]; } System.out.print(sum/3); System.out.printf("\n"); } int avg=0; for(int j=0;j<3;j++) { avg=0; for(int i=0;i<5;i++) { avg+=score[i][j]; } System.out.print(avg/5+" "); } System.out.print("\n"); int count=0; for(int i=0;i<5;i++) { count=0; for(int j=0;j<3;j++) { if(score[i][j]>=60) { count++; } } System.out.printf("第%d個學生 有%d個科目及格\n",i+1,count); } int count2=0; for(int j=0;j<3;j++) { count2=0; for(int i=0;i<5;i++) { if(score[i][j]>=60) { count2++; } } System.out.printf("第%d個科目 有%d個學生及格\n",j+1,count2); } System.out.printf("\n"); for(int i=0;i<5;i++) { System.out.printf("第%d個學生及格的有:\n",i+1); for(int j=0;j<3;j++) { if(score[i][j]>=60) { System.out.printf("第%d個科目 ",j+1); } } System.out.printf("\n"); } System.out.printf("\n"); for(int j=0;j<3;j++) { System.out.printf("第%d個科目及格的有:\n",j+1); for(int i=0;i<5;i++) { if(score[i][j]>=60) { System.out.printf("第%d個學生 ",i+1); } } System.out.printf("\n"); } } } ``` ::: <br> **:paperclip: 新解答:** ```java import java.util.Scanner; public class JPA0503 { static Scanner keyboard=new Scanner(System.in); public static void main(String args[]) { int [][]score=new int[5][3]; for(int i=0;i<5;i++) //1.輸入 { System.out.println("請輸入第"+(i+1)+"個學生"); for(int j=0;j<3;j++) { System.out.print("第"+(j+1)+"個科目 "); score[i][j]=keyboard.nextInt(); } } System.out.printf("\n"); for(int i=0;i<5;i++) //1.列出所有 { for(int j=0;j<3;j++) { System.out.printf("%d ",score[i][j]); } System.out.printf("\n"); } System.out.printf("\n"); for(int i=0;i<5;i++) { System.out.printf("第%d位學生有:\n",i+1); for(int j=0;j<3;j++) { if(score[i][j]>=60) { System.out.printf("第%d個科目及格\n",j+1); } } System.out.printf("\n"); } System.out.printf("\n"); for(int j=0;j<3;j++) { System.out.printf("第%d個科目有:\n",j+1); for(int i=0;i<5;i++) { if(score[i][j]>=60) { System.out.printf("第%d位學生及格\n",i+1); } } System.out.printf("\n"); } } } ``` --- ### 第四題 ### ==額外題延伸3== >使用 **二維陣列**+**雙重for**迴圈+**if判斷**+**max、min覆蓋** ### 📌題目: #### <font color=#984B4B>列出 每位學生的最高分科目與分數、每個科目的最高分是誰?幾分?</font> ### <font color="##EE7700">💡簡化題目步驟 **1. ==分別輸入==並==列出各學生各科成績== 2. 列出每位學生[最高分科目與分數] 3. 每個科目[最高分是誰?幾分?]** </font> :::spoiler **舊解答** ```java import java.util.Scanner; public class JPA054 { static Scanner keyboard=new Scanner(System.in); public static void main(String args[]) { int[][] score=new int [5][3]; for(int i=0;i<5;i++) { System.out.printf("請輸入第%d個學生\n",i+1); for(int j=0;j<3;j++) { System.out.printf("第%d個科目",j+1); score[i][j]=keyboard.nextInt(); } } int sum=0; for(int i=0;i<5;i++) { sum=0; for(int j=0;j<3;j++) { System.out.print(score[i][j]+" "); sum+=score[i][j]; } System.out.print(sum/3); System.out.printf("\n"); } int avg=0; for(int j=0;j<3;j++) { avg=0; for(int i=0;i<5;i++) { avg+=score[i][j]; } System.out.print(avg/5+" "); } System.out.print("\n"); int count=0; for(int i=0;i<5;i++) { count=0; for(int j=0;j<3;j++) { if(score[i][j]>=60) { count++; } } System.out.printf("第%d個學生 有%d個科目及格\n",i+1,count); } int count2=0; for(int j=0;j<3;j++) { count2=0; for(int i=0;i<5;i++) { if(score[i][j]>=60) { count2++; } } System.out.printf("第%d個科目 有%d個學生及格\n",j+1,count2); } System.out.printf("\n"); for(int i=0;i<5;i++) { System.out.printf("第%d個學生及格的有:\n",i+1); for(int j=0;j<3;j++) { if(score[i][j]>=60) { System.out.printf("第%d個科目 ",j+1); } } System.out.printf("\n"); } System.out.printf("\n"); for(int j=0;j<3;j++) { System.out.printf("第%d個科目及格的有:\n",j+1); for(int i=0;i<5;i++) { if(score[i][j]>=60) { System.out.printf("第%d個學生 ",i+1); } } System.out.printf("\n"); } System.out.printf("\n"); int max=0,index=0; for(int i=0;i<5;i++) { max=0; index=0; System.out.printf("第%d個學生最高分科目與成績有:\n",i+1); for(int j=0;j<3;j++) { if(score[i][j]>max) { max=score[i][j]; index=j; } } System.out.printf("第%d個科目:%d",index+1,max); System.out.printf("\n"); } System.out.printf("\n"); int max2=0,index2=0; for(int j=0;j<3;j++) { max2=0; index2=0; System.out.printf("第%d個科目最高分學生與成績有:\n",j+1); for(int i=0;i<5;i++) { if(score[i][j]>max2) { max2=score[i][j]; index2=i; } } System.out.printf("第%d個學生:%d",index2+1,max2); System.out.printf("\n"); } System.out.printf("\n"); } } ``` ::: <br> **:paperclip: 新解答:** ```java import java.util.Scanner; public class JPA0504 { static Scanner keyboard=new Scanner(System.in); public static void main(String args[]) { int [][]score=new int[5][3]; for(int i=0;i<5;i++) //1.輸入 { System.out.println("請輸入第"+(i+1)+"個學生"); for(int j=0;j<3;j++) { System.out.print("第"+(j+1)+"個科目 "); score[i][j]=keyboard.nextInt(); } } System.out.printf("\n"); for(int i=0;i<5;i++) //1.列出所有 { for(int j=0;j<3;j++) { System.out.printf("%d ",score[i][j]); } System.out.printf("\n"); } System.out.printf("\n"); int maxSubject=0,subjectScore=0; for(int i=0;i<5;i++) { maxSubject=0; subjectScore=0; System.out.printf("第%d位學生最高分為:\n",i+1); for(int j=0;j<3;j++) { if(score[i][j]>subjectScore) { maxSubject=j+1; subjectScore=score[i][j]; } } System.out.printf("第%d個科目 分數%d分\n",maxSubject,subjectScore); System.out.printf("\n"); } System.out.printf("\n"); int maxStu=0,stuScore=0; for(int j=0;j<3;j++) { maxStu=0; stuScore=0; System.out.printf("第%d個科目最高分為:\n",j+1); for(int i=0;i<5;i++) { if(score[i][j]>=stuScore) { maxStu=i+1; stuScore=score[i][j]; } } System.out.printf("第%d位學生 分數%d分\n",maxStu,stuScore); System.out.printf("\n"); } } } ``` --- :::spoiler 最後更新日期 >第一次編輯[time=2021 5 14 , 12:05 AM] >第二次編輯[time=2021 8 8 , 2:05 AM] >最後一次編輯[time=2021 9 4 , 7:23 PM][color=#786ff7] ::: ###### tags: `JAVA課堂學習` `複習用` `高科大`