# 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),