# Java第12週 ==額外題==
#### 複習用
## 開始解題
>額外題延伸-==**二維迴圈**的運用==
### 第一題
### <font color=#984B4B>分別列出 學生各科成績+計算 各學生、各科 平均值:</font>
>使用 **二維陣列**+**雙重for**迴圈
### 📌題目:
#### 宣告一個二維陣列,5列3行,要求使用者輸入5個學生3個科目的成績,
#### 列出整個陣列內容,並計算每位學生的平均成績、每個科目的平均成績
### <font color="##EE7700">💡簡化題目步驟
### 五個學生,三個科目
**1. ==分別輸入==並==列出各學生各科成績==
2. 計算出 各學生 成績平均 (輸出結果第四行)
3. 計算出 各科 成績平均 (輸出結果第六列)**
</font>

:::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課堂學習` `複習用` `高科大`