2020年4月22日 星期三

讓Blogger顯示code程式碼

紀念一下成功讓code顯示在blogger上,直接附上步驟 follow the steps :)




Step 1:

Google Code Prettify ---> 請點選這個網址,非常感謝這位作者

看得懂英文可以詳細了解一下,沒有點進去也沒關係,可以照以下步驟完成


Step 2:

在Blogger後台選取"版面配置",然後新增"小工具"


Step 3:

選擇HTML/JavaScript,按下+



Step 4:

在內容裡面貼以下串:

<script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script>




Step 5:

編輯內文時,在以下代碼之間插入要顯示的代碼塊

1.  <pre class="prettyprint">...</pre>

2. <code class="prettyprint">...</code>

Ex:

<pre class="prettyprint"> 

    System.out.println("Hinaisbestgirl");
    System.out.println("Sasugasensei");

</pre>


*如果想加入行數,可以這樣做:

<pre class="prettyprint linenums"> 

插入 linenums


* 其他種類的主題樣式

themes gallery           ----> 點選這個選擇喜歡的

複製好之後貼在
<script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script>
這串上面,別忘了加上<style>、</style>

EX:
<style> (複製的主題) </style> <script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script>











TreeSet集合: Comparable接口& Comparator接口

TreeSet集合的特性:
1. 無序但可以排序,必須實現Comparable接口和重寫compareTo方法,簡單來說就是必須提供編譯器排序的依據方法,詳細可以看創建對象TreeSett的無參構造方法(Comparator = null),以及新增元素使用add方法,底層調用TreeMap的put方法。
*不實現和重寫:
創建一個類,編譯器會報錯,錯誤類型: java.lang.ClassCastException

兩種解法:
(1) 實現Comparable接口和重寫 compareTo方法
(2) 使用Comparator比較器

(1) 第一種:
放在TreeSet集合中的元素需要實現 java.lang.Comparable接口,並且重寫compareTo方法
,compareTo方法需要編寫比較的邏輯 k.compareTo(t.key),返回值可能是 0,  <0,  >0,
比較規則是程序員自己指定的,比如說升序或降序

import java.util.*;

public class test01 {
    public static void main(String[] args) {
        User u1 = new User("100", "Hina");
        User u3 = new User("300", "Rui");
        User u2 = new User("200", "Natsuo");

        TreeSet<User> t = new TreeSet<>();
        t.add(u1);
        t.add(u2);
        t.add(u3);
        
        // 遍歷TreeSet集合
        for(User u : t){
            System.out.println(u);
        }
    }
}

// 寫一個User類 讓他實現Comparable接口 
class User implements Comparable<User>{
    private String idCard;
    private String name;
    public User(String idCard, String name){
        this.idCard = idCard;
        this.name = name;
    }
// Setter and Getter
    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 重寫compareTo方法,這邊用
    // String Integer.valueof()方法把String轉int讓他比較大小
    @Override
    public int compareTo(User u) {
        int thisint = Integer.valueOf(this.getIdCard());
        int userint = Integer.valueOf(u.idCard);
        return thisint - userint;

    }
    
    // 重寫toString方法讓遍歷時顯示每個元素 
    public String toString(){
        return "User[idCard= " + idCard + " , name= " + name + "]";
    }
}

(2) 第二種: 構造TreeSet或TreeMap集合時傳一個比較器對象


import java.util.*;

public class test01 {
    public static void main(String[] args) {
        User u1 = new User("100", "Hina");
        User u3 = new User("3000", "Rui");
        User u2 = new User("20", "Natsuo");

        // TreeSet<User> t= new TreeSet<>();
        // 這樣不行,要傳遞比較器

        // 給構造方法傳遞一個比較器
        TreeSet<User> t = new TreeSet<>(new UserCompare());
        t.add(u1);
        t.add(u2);
        t.add(u3);

        // 遍歷TreeSet集合
        for(User u : t){
            System.out.println(u);
        }
    }
}

    // 寫一個User類 讓他實現Comparable接口
class User{
    private String idCard;
    private String name;
    public User(String idCard, String name){
        this.idCard = idCard;
        this.name = name;
    }
    // Setter and Getter
    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    // 重寫toString方法讓遍歷時顯示每個元素
    public String toString(){
        return "User[idCard= " + idCard + " , name= " + name + "]";
    }
}

    // 單獨寫一個比較器
    // 比較器時現 java.util.Comparator接口
    // Comparable是 java.lang包下
    // Comparator是 java.util包下
class UserCompare implements Comparator<User>{

    // 重寫Compare方法,制定比較條件
    @Override
    public int compare(User o1, User o2) {
        int thisint = Integer.valueOf(o1.getIdCard());
        int userint = Integer.valueOf(o2.getIdCard());
        return thisint - userint;
    }
}

或者使用匿名內部類:
不用單獨寫一個比較器,但只能單次使用,無法代碼復用

        // 傳入比較器,比較器使用匿名內部類,直接new接口
        TreeSet<User> t = new TreeSet<>(new Comparator<User>(){
            public int compare(User o1, User o2) {
                int thisint = Integer.valueOf(o1.getIdCard());
                int userint = Integer.valueOf(o2.getIdCard());
                return thisint - userint;
            }
        });


*比較兩種方法:
1. Comparable是 java.lang包下,Comparator是 java.util包下
2. Comparable接口實現後,把代碼寫進此類當中,Comparator接口要獨立寫一個類
3. 當比較規則不會發生變化或只有一個,實現Comparable接口
比較規則多個,需要多個比較規則之間切換,建議使用Comparator接口,且此接口的設計符合OCP原則。


2020年4月15日 星期三

Java for(:) 循環

public class test01 {

    public static void main(String[] args) {
        int[] i = {100, 200, 300, 400};
        for (int b : i){
            System.out.println(b);
        }
    }
}

輸出結果
100
200
300
400

把i數組裡循環的數先存進b裡面,sout的時候打印出來

這個碼等於

        for (int b = 0; b < i.length; b++){
            System.out.println(i[b]);
        }