---
# System prepended metadata

title: JAVA(程設-期中考前)
tags: [JAVA(程設-期中考前)]

---

---
title: JAVA(程設-期中考前)
tags: JAVA(程設-期中考前)
---

# JAVA程式語言 --- 李鍾斌(程設-期中考前)

> 【目次】
> [TOC]
> 

> Reference website：
> 1. [程式語言的歷史資訊圖表：Java 才是現任霸主](http://technews.tw/2013/12/17/programming-languages/)
> 2. [程式語言的歷史演進 + 圖表 1843 ~ 2013](https://blog.longwin.com.tw/2013/12/programming-language-history-1843-2013/)
> 3. [DrJava--免安裝](http://www.drjava.org/)
> 

---
# C++ vs. JAVA
* C++ 可直接讀取電腦記憶體中的資料(操作風險)
* JAVA 不可對記憶體直接操作

---
# DrJava 操作步驟：
## 1. 建立類別 class
![](https://i.imgur.com/A1jgHUZ.png)
![](https://i.imgur.com/NcpGxTd.png)
![](https://i.imgur.com/DHwmvNG.png)

## 2. Compile：確認是否有語法錯誤
![](https://i.imgur.com/GwdgxAC.png)
![](https://i.imgur.com/F2BHkN3.png)

## 3. Run：執行
![](https://i.imgur.com/TlvE08i.png)

---
# Eclipse
1. 建立 project
![](https://i.imgur.com/IAu5CMH.jpg)
![](https://i.imgur.com/64LEUHf.png)

2. 建立 class
![](https://i.imgur.com/52iblAw.png)
![](https://i.imgur.com/1ngcwfC.png)

3. Run
![](https://i.imgur.com/JchsgDD.png)

* 更改字體大小
![](https://i.imgur.com/TdRtJr0.png)


---
* println (有換行) vs. print (沒換行)
![](https://i.imgur.com/65O4E5G.png)

* 小程式

|資料類型   |      |資料類型   |          |
| -------- | ----| -------- |--------  |
| int      | 整數 | long     | 長整數    |
| float    | 小數 | double   | 倍精度小數 |
| char     | 字元 | string   | 字串      |
| boolean  | 布林 |
![](https://i.imgur.com/UKK70mm.png)
![](https://i.imgur.com/aONpO56.png)
![](https://i.imgur.com/0qP1dRD.png)
![](https://i.imgur.com/PNpG1Rh.png)

## HW: BMI計算器
```java=
import java.util.*; 

public class Week02 { 
  public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    
    System.out.println("PLEASE INPUT height (cm): ");
    double height = sc.nextDouble();

    System.out.println("PLEASE INPUT weight (kg): ");
    double weight = sc.nextDouble();
    height = height/100;
    
    double bmi = weight/(height*height);
    System.out.println("BMI = " + bmi);   //BMI = 體重(公斤) / 身高2(公尺2)
  }
}
```
---

# 2018-10-01 class
## if - else 條件式
```java=
if(條件式1){
    ... //符合條件時，要執行的內容
}
else if(條件式2){
    ... //符合條件時，要執行的內容
}
else{
    ... //不符合條件時，要執行的內容
}

>        <         >=          <=

a==b     相等       vs. a=b     給值
a!=b     不相等

&&       and 且
||       or 或
```

* BMI 加上條件式--簡潔版
```java=
import java.util.*; 

public class Week03 { 
  public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    
    System.out.println("PLEASE INPUT height (cm): ");
    double height = sc.nextDouble();

    System.out.println("PLEASE INPUT weight (kg): ");
    double weight = sc.nextDouble();
    height = height/100;
    
    double bmi = weight/(height*height);
    System.out.println("BMI = " + bmi);   //BMI = 體重(公斤) / 身高2(公尺2)
    
    if (bmi < 20)
      System.out.println("體重過輕");
    else if (bmi < 25)
      System.out.println("體重正常");  
    else if (bmi < 30)
      System.out.println("體重過重");
    else
      System.out.println("go to see a doctor");
    
  }
}
```
* BMI 加上條件式--麻煩版
```java=
if (bmi < 20)
  System.out.println("體重過輕");
else 
  if (bmi < 25 && bmi >= 20)
    System.out.println("體重正常");  
  else
    if (bmi < 30 && bmi >= 25)
      System.out.println("體重過重");
    else
      System.out.println("go to see a doctor");
```


* Python可以這樣用!!!
```python=
bmi = 24

if bmi < 20:
    print("體重過輕")
elif (20 <= bmi < 25):
    print("體重正常")
elif (30 > bmi >= 25):
    print("體重過重")
else:
    print("go to see a doctor")
```


## switch 條件式
```java=
import java.util.*; 

public class Week02 { 
  public static void main(String[] args) { 
    
    Scanner sc = new Scanner(System.in); 
    System.out.println("PLEASE INPUT number: ");
    int sex = sc.nextInt();
    
    switch(sex){
      case 1:
        System.out.println("boy");
        break;
      case 2:
        System.out.println("girl");
        break;
      default:
        System.out.println("error");
    }
```

## HW: 利用機車排氣量，計算牌照稅、燃料稅、total!!!
```java=
import java.util.*; 

public class tax { 
  public static void main(String[] args) { 
    
    Scanner sc = new Scanner(System.in); 
    System.out.println("PLEASE INPUT : 機車排氣量");
    double engine_displacement = sc.nextDouble(); //機車排氣量
    
    int license_tax= 0; //牌照稅
    int fuel_tax = 0;   //燃料稅
    int total_tax = license_tax + fuel_tax;
    
    if (engine_displacement <= 50){  
      license_tax=0;
      fuel_tax=300;
    }
    else if (engine_displacement <= 125){  
      license_tax=0;
      fuel_tax=450;
    }
    else if (engine_displacement <= 150){  
      license_tax=0;
      fuel_tax=600;
      }
    else if (engine_displacement <= 250){
      license_tax=800;
      fuel_tax=600;
      }
    else if (engine_displacement <= 500){
      license_tax=1620;
      fuel_tax=900;
      }
    else if (engine_displacement <= 600){
      license_tax=2160;
      fuel_tax=1200;
      }
    else if (engine_displacement <= 1200){
      license_tax=4320;
      fuel_tax=1800;
      }
    else if (engine_displacement <= 1800){
      license_tax=7120;
      fuel_tax=2010;
      }
    else{
      license_tax=11230;
      fuel_tax=2010;
      }
    System.out.println("Vehicle License Tax + Fuel Tax = " + total_tax);
    System.out.println(license_tax + " + " + fuel_tax + " = " + total_tax);
  }
}
```

# 2018-10-08 class
## for 迴圈
```java=
for(旗標變數的起始值; 迴圈繼續執行的條件; 旗標變數的改變量){
    ... //迴圈要執行的內容   
}
```

```java=
public class Week5 {
  public static void main(String[] args) { 
    
    int i;
    for(i=1; i<=5; i=i+1){
      System.out.println("i=" + i);
    }
  }
}

Output:
i=1
i=2
i=3
i=4
i=5
```

```java=
public class Week5 {
  public static void main(String[] args) { 
    int i;               //迴圈使用的旗標變數
    int sum = 0;         //用來計算總合的變數
    for(i=1;i<=10;i=i+1){
      System.out.println("i=" + i);
      sum = sum + i;     //將旗標變數 目前的內容值加到sum中
    }
    System.out.println("Sum = " + sum);
  }
}

Output:
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
i=10
Sum = 55
```

```java=
import java.util.*; 

public class Week5 {
  public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    System.out.println("PLEASE INPUT ANY INTERGER: ");
    int num = sc.nextInt(); //輸入整數，之後會做加總
    
    int i;         //迴圈使用的旗標變數
    int sum = 0;   //用來計算總合的變數
    
    for(i=1;i<=num;i=i+1){
      System.out.println("i=" + i);
      sum = sum + i;     //將旗標變數 目前的內容值加到sum中
    }
    System.out.println("Sum = " + sum);
  }
}

Output:
PLEASE INPUT ANY INTERGER:  [DrJava Input Box = 3]
i=1
i=2
i=3
Sum = 6
```
## 印出指定項次的費氏數列
```java=
import java.util.*; 

public class Week5 {
  public static void main(String[] args) { 
    int i; //迴圈使用的旗標變數
    int pre1=0,pre2=0,current; //用來保存費氏數列的前項,前二項,目前項
    
    Scanner sc = new Scanner(System.in); 
    System.out.println("請輸入項次: ");
    int num = sc.nextInt(); 
    
    for(i=1; i<=num; i++){
      if(i==1)
        System.out.println("F(1)=1");
      else if (i==2){
        System.out.println("F(2)=1");
        pre1 = 1; pre2 = 1; //先為i=3時的前項與前二項做準備
    }
    else{
        current = pre1 + pre2; //費氏數列的第三項起 數值為前兩項和
        System.out.println("F(" + i + ") = " + current);
        pre2 = pre1; //迴圈進入下一輪之前，將本輪的前項值交給前二項
        pre1 = current; //將本輪的current值交給前項
      } //end of else
    } //end of for

  }
}

Output:
請輸入項次:  [DrJava Input Box = 5]
F(1)=1
F(2)=1
F(3) = 2
F(4) = 3
F(5) = 5

```

## HW: 印出等差數列
```java=
#方法一
import java.util.*; 

public class Week5 {
  public static void main(String[] args) { 
    int i; //迴圈使用的旗標變數
    int pre1=0,pre2=0,current; //用來保存費氏數列的前項,前二項,目前項
    
    Scanner sc = new Scanner(System.in); 
    System.out.println("請輸入首項: "); //2
    System.out.println("請輸入項數: "); //5
    System.out.println("請輸入公差: "); //3   
    int a = sc.nextInt(); //2,5,8,11,14
    int n = sc.nextInt(); //a,a+d,a+d+d,a+d+d+d,a+d+d+d+d
    int d = sc.nextInt(); 

    for(i=1; i<=n; i++){
      if (i==1) //第一輪 印出 首項
        System.out.println(a);
      else if (i==2){
        a = a+d; //第二輪 執行 首項+公差
        System.out.println(a);
      }
      else {
        a = a+d; //第三輪以後 執行 首項+公差
        System.out.println(a);
        }
    } //end of for

  }
}


#課堂上雖已繳交，不過我還是想把原本想做的方式做出來，故此版本為方法二
import java.util.*;

public class week5 {
	public static void main(String[] args) {
		
		int k; //用來計算當前該項之公差的係數
		int current = 0; //當前該項數的數值
		
		Scanner sc = new Scanner(System.in);
		System.out.println("輸入首項"); 
		int a = sc.nextInt(); 			//首項=2
		System.out.println("輸入項數");
		int n = sc.nextInt(); 			//項數=5
		System.out.println("輸入公差");
		int d = sc.nextInt(); 			//公差=3
		
		for (k=0; k<=n-1; k++) {
			current = a + k * d; 
			//公式: 當前該項數的數值 = 首項 + 係數 * 公差
			//2=2+0*3, 5=2+1*3, 8=2+2*3, 11=2+3*3, 14=2+4*3
			
			System.out.println(current);
		}

	}

}
```


# 2018-10-15 class
## for 迴圈 (排版美觀)
```java=
##方法一
import java.util.*;

public class Week06 {
  public static void main(String[] args) { 
    
    for (int i=1; i<=9; i++){
      for (int j=1; j<=9; j++){
        System.out.print(i + "*" + j + "=" + (i*j) + "   ");
      }
      System.out.println();
    }
  
  }
}

##方法二
for (int i=1; i<=9; i++){
  for (int j=1; j<=9; j++){
    System.out.printf("%d * %d = %d  ",i ,j ,i*j);
  }
  System.out.println();
}

Output:
1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9   
2*1=2   2*2=4   2*3=6   2*4=8   2*5=10   2*6=12   2*7=14   2*8=16   2*9=18   
3*1=3   3*2=6   3*3=9   3*4=12   3*5=15   3*6=18   3*7=21   3*8=24   3*9=27   
4*1=4   4*2=8   4*3=12   4*4=16   4*5=20   4*6=24   4*7=28   4*8=32   4*9=36   
5*1=5   5*2=10   5*3=15   5*4=20   5*5=25   5*6=30   5*7=35   5*8=40   5*9=45   
6*1=6   6*2=12   6*3=18   6*4=24   6*5=30   6*6=36   6*7=42   6*8=48   6*9=54   
7*1=7   7*2=14   7*3=21   7*4=28   7*5=35   7*6=42   7*7=49   7*8=56   7*9=63   
8*1=8   8*2=16   8*3=24   8*4=32   8*5=40   8*6=48   8*7=56   8*8=64   8*9=72   
9*1=9   9*2=18   9*3=27   9*4=36   9*5=45   9*6=54   9*7=63   9*8=72   9*9=81
```

* %d 整數
* %f 小數
* %s 字串
* %c 字元
* \n 換行
* \t 跳到下個定位點

```java=
##方法三
for (int i=1; i<=9; i++){
  for (int j=1; j<=9; j++){
    System.out.printf("%2d*%2d=%2d  ",i ,j ,i*j); //用兩位數的寬度來放資料
  }
  System.out.printf("\n"); //= System.out.println();
}

Output:
 1* 1= 1   1* 2= 2   1* 3= 3   1* 4= 4   1* 5= 5   1* 6= 6   1* 7= 7   1* 8= 8   1* 9= 9  
 2* 1= 2   2* 2= 4   2* 3= 6   2* 4= 8   2* 5=10   2* 6=12   2* 7=14   2* 8=16   2* 9=18  
 3* 1= 3   3* 2= 6   3* 3= 9   3* 4=12   3* 5=15   3* 6=18   3* 7=21   3* 8=24   3* 9=27  
 4* 1= 4   4* 2= 8   4* 3=12   4* 4=16   4* 5=20   4* 6=24   4* 7=28   4* 8=32   4* 9=36  
 5* 1= 5   5* 2=10   5* 3=15   5* 4=20   5* 5=25   5* 6=30   5* 7=35   5* 8=40   5* 9=45  
 6* 1= 6   6* 2=12   6* 3=18   6* 4=24   6* 5=30   6* 6=36   6* 7=42   6* 8=48   6* 9=54  
 7* 1= 7   7* 2=14   7* 3=21   7* 4=28   7* 5=35   7* 6=42   7* 7=49   7* 8=56   7* 9=63  
 8* 1= 8   8* 2=16   8* 3=24   8* 4=32   8* 5=40   8* 6=48   8* 7=56   8* 8=64   8* 9=72  
 9* 1= 9   9* 2=18   9* 3=27   9* 4=36   9* 5=45   9* 6=54   9* 7=63   9* 8=72   9* 9=81
```

```java=
##方法四
for (int i=1; i<=9; i++){
  for (int j=1; j<=9; j++){
    System.out.printf("%d*%d=%d\t",i ,j ,i*j); // \t 跳到下個定位點
  }
  System.out.printf("\n");
}

Output:
1*1=1	1*2=2	1*3=3	1*4=4	1*5=5	1*6=6	1*7=7	1*8=8	1*9=9	
2*1=2	2*2=4	2*3=6	2*4=8	2*5=10	2*6=12	2*7=14	2*8=16	2*9=18	
3*1=3	3*2=6	3*3=9	3*4=12	3*5=15	3*6=18	3*7=21	3*8=24	3*9=27	
4*1=4	4*2=8	4*3=12	4*4=16	4*5=20	4*6=24	4*7=28	4*8=32	4*9=36	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	5*6=30	5*7=35	5*8=40	5*9=45	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	6*7=42	6*8=48	6*9=54	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	7*8=56	7*9=63	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	8*9=72	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81
```

## while 迴圈 (事先檢查。上車收票)
```java=
for (i=1; i<=n; i++){    //使用時機:已知該跑幾次
    ...
}

VS.             //目前兩種相同

int i=1;
while (i<=n){            //使用時機:不知該跑幾次,但知道條件
    ...
    i++;
}
```
```java=
int i=1;
while (i<=9){
  int j=1;        //notce! j要放裡面
  while (j<=9){
    System.out.printf("%d*%d=%d\t",i,j,i*j);
    j++;
  }
  System.out.printf("\n");
  i++;
}
```

## do ... while 迴圈 (先做再說，一定會做完第一次。下車收票)
```java=
int i;
do {
    ...
    i++;
} while (i<=n);
```

---
```java=
for (int i=1; i<=5; i++){
  for (int j=1; j<=i; j++){
    System.out.printf("%d*%d=%d\t",i ,j ,i*j); // \t 跳到下個定位點
  }
  System.out.printf("\n");
}

Output:
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25
```
```java=
Scanner sc = new Scanner(System.in);

System.out.println("please enter integer: ");
int n = sc.nextInt();

for (int i=1; i<=n; i++){
  for (int j=1; j<=i; j++){
    System.out.printf("正"); // \t 跳到下個定位點
  }
  System.out.printf("\n");
}
    
Output:
please enter integer:  [DrJava Input Box =4]
正
正正
正正正
正正正正
```

```java=
Scanner sc = new Scanner(System.in);

System.out.println("please enter integer: ");
int n = sc.nextInt();

for (int i=n; i>=1; i--){
  for (int j=1; j<=i; j++){
    System.out.printf("正"); // \t 跳到下個定位點
  }
  System.out.printf("\n");
}

Output:
please enter integer:  [DrJava Input Box =4]
正正正正
正正正
正正
正
```

```java=
Scanner sc = new Scanner(System.in);

System.out.println("please enter integer: ");
int n = sc.nextInt();

for (int i=1; i<=n; i++){
  for (int j=1; j<=n-i; j++){
    System.out.print("_ "); // 印__的內圈
  }
  for (int j=1; j<=i; j++){
    System.out.print("正"); // 印正的內圈
  }
  System.out.print("\n");
}

Output:
please enter integer: [DrJava Input Box =4]
_ _ _ 正
_ _ 正正
_ 正正正
正正正正
```
## HW: 用 for 迴圈印出固定格式

```java=
Scanner sc = new Scanner(System.in);

System.out.println("please enter integer: ");
int n = sc.nextInt();

for (int i=0; i<=n-1; i++){
  for (int j=1; j<=i; j++){
    System.out.print("白"); // 印"白"的內圈
  }
  for (int j=1; j<=n-i; j++){
    System.out.print("星"); // 印"星"的內圈
  }
  System.out.print("\n");
}

Output:
please enter integer: [DrJava Input Box =4]
星星星星星
白星星星星
白白星星星
白白白星星
白白白白星
```

# 2018-10-22 class
## 陣列 array (matrix)
* 現有能力：用"變數"來存取n次 (共n筆資料)
  運用陣列 --> 省時省力
* java 儲存同質性的資料型態 vs. python 可塞不同的資料型態

### 一維陣列
* int [] array_test = new int[n]; //依據使用者需求宣告陣列大小
```java=
//未知初始值
int [] array_test = new int [10]; // 10個可以放整數大小的記憶體空間。 
                                  //array[0]~array[9]
for (int i=0; i<10; i++)
  array_test[i] = i*2;
for (int i=0; i<10; i++)
  System.out.println("array["+i+"]="+array_test[i]);
```

```java=
//已知初始值
int [] array_test = {1,2,3,4,5,6,7,8,9,10}; 
    //  for (int i=0; i<10; i++)
    //    array_test[i] = i*2;
for (int i=0; i<10; i++)
  System.out.println("array["+i+"]="+array_test[i]);
```

```java=
import java.util.*;
public class Week07 {
  public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in);
    System.out.println("資料筆數：");
    int n = sc.nextInt();
    
    int [] array_test = new int[n]; //依據使用者需求宣告陣列大小
    
    for (int i=0; i<n; i++) {
      System.out.printf("請輸入第%d筆資料",i+1);
      array_test[i] = sc.nextInt();
    }
    for (int i=0; i<n; i++) {
      System.out.println("array["+i+"]="+array_test[i]); //the same
      System.out.printf("array[%d]=%d\n",i,array_test[i]);
    }
    
  }
}

Output:
資料筆數： [DrJava Input Box = 2]
請輸入第1筆資料 [DrJava Input Box = 8]
請輸入第2筆資料 [DrJava Input Box = 6]
array[0]=8
array[1]=6
```

```java=
import java.util.*;
public class Week07 {
  public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in);
    System.out.println("資料筆數：");
    int n = sc.nextInt();
    
    int [] array_test = new int[n]; //依據使用者需求宣告陣列大小
    double sum=0,avg=0;
    double max=0,min=0;
    
    for (int i=0; i<n; i++) {
      System.out.printf("請輸入第%d筆資料",i+1);
      array_test[i] = sc.nextInt();
      sum += array_test[i];  //將使用者輸入的成績加總至sum變數中
      
      if(i==0) 
        max = array_test[i]; //直接將第一筆資料設定為最高分
      else{ //第二筆以後的資料
        if(array_test[i]>max) //如果該筆資料>max
          max = array_test[i]; //該筆設為max
      }
      if(i==0) 
        min = array_test[i]; //直接將第一筆資料設定為最低分
      else{ //第二筆以後的資料
        if(array_test[i]<min) //如果該筆資料<min
          min = array_test[i]; //該筆設為min
      }
    }
    avg=sum*1.0/n;  //跳出迴圈後就可以直接計算平均成績
    for (int i=0; i<n; i++)
      //System.out.println("array["+i+"]="+array_test[i]); //the same
      System.out.printf("array[%d]=%d\n",i,array_test[i]);
      
    System.out.println("平均成績="+avg);     //平均、高、低
    System.out.println("最高成績="+max);
    System.out.println("最低成績="+min);

  }
}

Output:
資料筆數： [DrJava Input Box = 5]
請輸入第1筆資料 [DrJava Input Box = 64]
請輸入第2筆資料 [DrJava Input Box = 32]
請輸入第3筆資料 [DrJava Input Box = 100]
請輸入第4筆資料 [DrJava Input Box = 83]
請輸入第5筆資料 [DrJava Input Box = 94]
array[0]=64
array[1]=32
array[2]=100
array[3]=83
array[4]=94
平均成績=74.6
最高成績=100.0
最低成績=32.0
```

```java=
#簡化
import java.util.*;
public class Week07 {
  public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in);
    System.out.println("資料筆數：");
    int n = sc.nextInt();
    
    int [] array_test = new int[n]; //依據使用者需求宣告陣列大小
    double sum=0,avg=0;
    double max=0,min=0;
    
    for (int i=0; i<n; i++) {
      System.out.printf("請輸入第%d筆資料",i+1);
      array_test[i] = sc.nextInt();
      sum += array_test[i];  //將使用者輸入的成績加總至sum變數中
      
      if(i==0) {
        max = array_test[i]; //直接將第一筆資料設定為最高分
        min = array_test[i]; //直接將第一筆資料設定為最低分
      }
      else { //第二筆以後的資料
        if(array_test[i]>max) //如果該筆資料>max
          max = array_test[i]; //該筆設為max
        if(array_test[i]<min) //如果該筆資料<min
          min = array_test[i]; //該筆設為min
      }
    }
    avg=sum*1.0/n;  //跳出迴圈後就可以直接計算平均成績
    for (int i=0; i<n; i++)
      //System.out.println("array["+i+"]="+array_test[i]); //the same
      System.out.printf("array[%d]=%d\n",i,array_test[i]);
      
    System.out.println("平均成績="+avg);     //平均、高、低
    System.out.println("最高成績="+max);
    System.out.println("最低成績="+min);

  }
}
```

### 二維陣列
* int [] array_test = new int[n]; //依據使用者需求宣告陣列大小

```java=
//n個學生的3個成績，成績單格式。數統、JAVA、會計
//平均、min、max
import java.util.*;
public class Week07 {
  public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in);
    int [] sum = {0,0,0}; //用來記錄加總結果
    double [] avg = {0,0,0}; //用來計算平均成績
    int [] max = {0,0,0}; //用來記錄最高分
    int [] min = {0,0,0}; //用來記錄最低分
    
    System.out.println("資料筆數："); 
    int n = sc.nextInt();
    
    int [][] array_test = new int[n][3]; ////依據使用者需求宣告陣列大小 //橫向3(科目)，直向n(學生) //array[0][0]、array[0][1]、array[0][2]
    int i,j; //迴圈的旗標變數
    
    for (j=0; j<3; j++) { //先依科目別輸入成績
      for (i=0; i<n; i++) { //醫學生流水號輸入成績
        System.out.printf("請輸入第%d科第%d筆資料：",j+1,i+1);
        array_test[i][j] = sc.nextInt();
        sum[j] += array_test[i][j];  //將使用者輸入的成績加總至sum變數中
      }
      
      if(i==0) {
        max[j] = array_test[i][j]; //直接將第一筆資料設定為最高分
        min[j] = array_test[i][j]; //直接將第一筆資料設定為最低分
      }
      else { //若是第二筆以後的資料
        if(array_test[i][j]>max[j]) //如果該筆資料>目前最高分
          max[j] = array_test[i][j]; //該筆設為目前最高分
        if(array_test[i][j]<min[j]) //如果該筆資料<目前最低分
          min[j] = array_test[i][j]; //該筆設為目前最低分
      }
    }

    for (j=0; i<3; j++){
      avg[j]=sum[j]*1.0/n;  //跳出迴圈後就可以直接計算平均成績
      System.out.printf("第%d科平均成績=%f\n",j+1,avg[j]);
      System.out.printf("第%d科最高成績=%d\n"+max);
      System.out.printf("第%d科最低成績=%d\n"+min);
    }
      //System.out.println("array["+i+"]="+array_test[i]); //the same


  }
}

```
## HW: 二維陣列-成績表
```java=
import java.util.*;

public class Week07 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int [] sum = {0,0,0}; //用來記錄加總結果
		double [] avg = {0,0,0}; //用來計算平均成績
		int [] max = {0,0,0};
		int [] min = {0,0,0}; //用來記錄最高分及最低分
		double [] avg_row = {0,0,0}; //用來計算表格內橫向的平均成績
		
		System.out.println("please enter 資料筆數：");
		int n = sc.nextInt();
		int [][] array = new int [n][3]; //依據使用者需求來宣告陣列大小
		int i,j; //用於迴圈的旗標變數
		int [] sum_row = new int [n];
		
		for (j=0; j<3; j++) { //先依科目別輸入成績
			for (i=0; i<n; i++) { //依學生流水號輸入成績
				System.out.printf("請輸入第%d科第%d筆資料：", j+1, i+1);
				array[i][j] = sc.nextInt();
				sum[j] += array[i][j]; //將使用者輸入的成績加總至sum變數中 (某一科目的全班平均)
				
				sum_row[i] += array[i][j]; //將使用者輸入的成績加總至sum變數中 (某一學生的三科平均)
				
				if (i==0) {
					max[j] = array [i][j]; //直接將第一筆資料設定為最高分
					min[j] = array [i][j]; //直接將第一筆資料設定為最低分
				}
				else { //若是第二筆以後的資料
					if (array[i][j] > max[j]) //如果該筆資料>目前最高分
						max[j] = array[i][j]; //將該資料設為目前最高分
					if (array[i][j] < min[j]) //如果該筆資料<目前最低分
						min[j] = array[i][j]; //將該資料設為目前最低分
				}
			}
		}
		System.out.println("   #       數統    JAVA  會計    平均   ");
		System.out.println("============================");
		for(i=0; i<n; i++)
			System.out.printf("%2d %4d %4d %4d %2f \n", i+1, array[i][0], array[i][1], array[i][2], sum_row[i]*1.0/3); //sum_row[i]*1.0/3  為計算該學生三科的平均
		System.out.println("============================");
		for(j=0; j<3; j++) { //不同科目在迴圈內依序處理
			avg[j] = sum[j]*1.0/n; //在列印前依據sum陣列內的總分計算出平均
			System.out.printf("第%d科平均成績=%f\n", j+1, avg[j]);
			System.out.printf("第%d科最高分=%d\n", j+1, max[j]);
			System.out.printf("第%d科最低分=%d\n", j+1, min[j]);
		}
		
	}
}

```
# 2018-10-29 class
## 高鐵自由座(全票、優待票價錢 + 上下車站)
```java=
#方法一

import java.util.*;

public class Week08 {
  public static void main(String[] args) { 
    
    int [][] fare = {{0,15,30,95,160,230,360,420,470,540,670,740},{35,0,15,75,140,205,335,395,450,520,650,720},{65,35,0,60,125,190,320,380,435,505,640,705},{190,155,125,0,60,135,260,320,375,445,575,645},
                     {320,280,250,125,0,65,195,260,310,380,510,580},{465,415,385,270,135,0,130,185,240,310,445,510},{725,675,645,520,395,260,0,60,110,180,315,380},{840,795,765,645,520,375,125,0,50,120,255,320},
                     {940,900,870,755,620,485,220,105,0,70,200,270},{1085,1045,1015,890,765,620,365,240,145,0,135,195},{1345,1305,1280,1150,1025,890,630,510,405,270,0,65},{1480,1445,1415,1290,1160,1025,765,645,540,395,135,0}};
    Scanner sc = new Scanner(System.in);
    System.out.println("請輸入 全票-0，優待票-1： ");
    int type = sc.nextInt();
    System.out.println("上車的編號： ");
    int start = sc.nextInt();
    System.out.println("下車的編號： ");
    int stop = sc.nextInt();
    
    //System.out.println("fare[0][2] = " + fare[0][2]); //print(30)
    //System.out.println("fare[3][0] = " + fare[3][0]); //print(190)
    int max = fare[start][stop];
    int min = fare[stop][start];
    if (max < min){
      max = fare[stop][start];
      min = fare[start][stop];
    }

    if (type==0){
      System.out.println("票價：" + max);
    }else{
      System.out.println("票價：" + min);
    }
   
  }
}
```
```java=
#方法二

int answer = 0;
if (type==0 && start < stop){
  answer = fare[stop][start];
}else if(type==1 && start > stop){
  answer = fare[stop][start];
}else{
  answer = fare[start][stop];
}
System.out.println("票價：" + answer);
```

## HW：(自由座+對號座)
```java=
import java.util.*;

public class Week08 {
  public static void main(String[] args) { 
    
    int [][][] fare = {{{0,15,30,95,160,230,360,420,470,540,670,740},{35,0,15,75,140,205,335,395,450,520,650,720},{65,35,0,60,125,190,320,380,435,505,640,705},{190,155,125,0,60,135,260,320,375,445,575,645},
                     {320,280,250,125,0,65,195,260,310,380,510,580},{465,415,385,270,135,0,130,185,240,310,445,510},{725,675,645,520,395,260,0,60,110,180,315,380},{840,795,765,645,520,375,125,0,50,120,255,320},
                     {940,900,870,755,620,485,220,105,0,70,200,270},{1085,1045,1015,890,765,620,365,240,145,0,135,195},{1345,1305,1280,1150,1025,890,630,510,405,270,0,65},{1480,1445,1415,1290,1160,1025,765,645,540,395,135,0}},
      
                     {{0,20,35,100,165,240,375,435,485,560,695,765},{40,0,20,80,145,215,350,410,465,540,675,745},{70,40,0,65,130,200,335,395,450,525,660,730},{200,160,130,0,65,140,270,335,390,460,595,665},
                     {330,290,260,130,0,70,205,270,320,395,530,600},{480,430,400,280,140,0,135,195,250,320,460,530},{750,700,670,540,410,270,0,65,115,190,325,395},{870,820,790,670,540,390,130,0,55,125,265,335},
                     {970,930,900,780,640,500,230,110,0,75,210,280},{1120,1080,1050,920,790,640,380,250,150,0,140,205},{1390,1350,1320,1190,1060,920,650,530,420,280,0,70},{1530,1490,1460,1330,1200,1060,790,670,560,410,140,0}}}; //使用三維陣列
    Scanner sc = new Scanner(System.in);
    
    System.out.println("請輸入 自由座-0，對號座-1： ");
    int seat_type = sc.nextInt();
    System.out.println("請輸入 全票-0，優待票-1： ");
    int type = sc.nextInt();
    System.out.println("上車的編號： ");
    int start = sc.nextInt();
    System.out.println("下車的編號： ");
    int stop = sc.nextInt();
    
    
    int max = fare[seat_type][start][stop]; //預設最大值為fare[seat_type][start][stop]
    int min = fare[seat_type][stop][start];
    if (max < min){ //比大小，max為全票，min為優待票
      max = fare[seat_type][stop][start];
      min = fare[seat_type][start][stop];
    }
    if (type==0){
      System.out.println("票價：" + max);
    }else{
      System.out.println("票價：" + min);
    }

    
  }
}

```