# 8/25 K速記
## 河內塔 解法
```java=
public static void HanoiMove(int i, char a,char b,char c) {
if (i == 1) {
System.out.println((i)+": " + a + " -> " + c);
return; //void 可使用return 脫離,減少if else 後方階層
}
HanoiMove(i - 1,a,c,b);
System.out.println((i)+": " + a + " -> " + c);
HanoiMove(i - 1,b,a,c);
}
```
以最後目標階層 作為展開,如 i階層 上方有其他階層,使用 河內塔搬移(i-1)2到暫存,
搬完i目標階層,才將(i-1)階層 使用河內塔搬移,從暫存移到目標區,完成動作。
* 字串
```java=
String str = "2";
```
因字串長度"非固定",當賦值時候,是回傳address,為java的特例。
若字串被放入函式內,再重新賦值,並不會更改到外部字串。形成類似基本型態參數的感覺。
* Java有分為 編譯時期 / 執行時期
* ( 編譯時期 ) .java檔案 經過 javac (compiler)轉換為 class檔案
* ( 執行時期 ) 經由jvm(java虛擬機)轉換為不同平台的執行檔案
heap區域 一般用為 非固定大小的存放區
* new的行為
```java=
int i = new int[3];
```
new的行為 會在執行時期 新分配heap區的記憶體。 該行為 只會在"執行時期"
```java=
public static void = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
String str1 = "1"+"2";
String str2 = "12";
String str3 = sc.nextLine();
String str4 = sc.nextLine();
String str5 = new String("12");
System.out.println(str1 == str2); //true
System.out.println(str1 == str3); //falae
System.out.println(str3 == str4); //false
System.out.println(str1 == str5); //false
```
* 在編譯時期,str1及str2的"12",因為計算完的值 都相同,會在heap建立,指向同一個位址,故為true。
* str3 及 str4 ,在執行階段 各自在heap 產生一個新位址,於是與原本的str1位址都不相同,故false
* str5 會在執行階段,才在heap被建立,故與str1及str2的位址不同,故為false。
字串比較
str1.equals(str2); 才能比較子串內資料。
若 if (str1==str2) 此時判定是str1及str2的位址是否相同。
* String pool
* 若在編譯階段,所有固定字串將會先被分配位置,
* 若只在函式內被使用的字串,在函式未執行或結束後,其字串仍不會被消滅,
* String 物件常用方法
* str1.compareTo(str2) => 回傳不同字元的 ascii數值差值,若長度不同則回傳1/-1。
* str1.split(" "); 依照()內字串,進行分離,<正則表示式>
## 函式 多載 (overloading)
```java=
public static void main(String[] args) {
System.out.println(test()); //1
System.out.println(test(6)); //6
System.out.println(test(2,3)); //5
}
//overloading
public static int test(){
return 1;
}
public static double test(double a){
return a;
}
public static int test(int a, int b){
return a+b;
}
```
最常見的多載,就 System.out.print() 可輸入各種形態資料都可列印。
有函式及建構子的overloading
## 物件導向
* java為 全物件導向程式語言 (Objactive-Oriented Porgram Languare,OOPL)
* (類別)內 包含 (屬性) 及 (方法)
* 建構子 用來初始化參數,封裝等級可以更改(一般為 public),