1. 程式人生 > >王之泰/王志成《面向物件程式設計(java)》第十一週學習總結

王之泰/王志成《面向物件程式設計(java)》第十一週學習總結

第一部分:理論知識學習部分

第十一章理論知識主要為集合類的介紹,在實驗中都有所體現且本週主要複習回顧上週的泛型程式設計

第二部分:實驗部分 ——集合

1、實驗目的與要求

(1) 掌握Vetor、Stack、Hashtable三個類的用途及常用API;

(2) 瞭解java集合框架體系組成;

(3) 掌握ArrayList、LinkList兩個類的用途及常用API。

(4) 瞭解HashSet類、TreeSet類的用途及常用API。

(5)瞭解HashMap、TreeMap兩個類的用途及常用API;

(6) 結對程式設計(Pair programming

)練習,體驗程式開發中的兩人合作。

2、實驗內容和步驟

實驗1: 匯入第9章示例程式,測試程式並進行程式碼註釋。

測試程式1:

1.使用JDK命令執行編輯、執行以下三個示例程式,結合執行結果理解程式;

2.掌握Vetor、Stack、Hashtable三個類的用途及常用API。 

 1 //示例程式1
 2 import java.util.Vector;
 3 
 4 class Cat {
 5     private int catNumber;
 6 
 7     Cat(int i) {
 8         catNumber = i;
 9     }
10 11 void print() { 12 System.out.println("Cat #" + catNumber); 13 } 14 } 15 16 class Dog { 17 private int dogNumber; 18 19 Dog(int i) { 20 dogNumber = i; 21 } 22 23 void print() { 24 System.out.println("Dog #" + dogNumber); 25 } 26 } 27 28 public
class CatsAndDogs { 29 public static void main(String[] args) { 30 Vector cats = new Vector(); 31 for (int i = 0; i < 7; i++) 32 cats.addElement(new Cat(i)); 33 cats.addElement(new Dog(7)); 34 for (int i = 0; i < cats.size(); i++) 35 ((Cat) cats.elementAt(i)).print(); 36 } 37 }

結果如下:

處理後:

 1 package shi_li;
 2 
 3 import java.util.Vector;
 4 
 5 class Cat {
 6     private int catNumber;
 7 
 8     Cat(int i) {
 9         catNumber = i;
10     }
11 
12     void print() {
13         System.out.println("Cat #" + catNumber);
14     }
15 }
16 
17 class Dog {
18     private int dogNumber;
19 
20     Dog(int i) {
21         dogNumber = i;
22     }
23 
24     void print() {
25         System.out.println("Dog #" + dogNumber);
26     }
27 }
28 
29 public class CatsAndDogs {
30     public static void main(String[] args) {
31         Vector cats = new Vector();
32         for (int i = 0; i < 7; i++)
33             cats.addElement(new Cat(i));
34         cats.addElement(new Dog(7));
35         for (int i = 0; i <cats.size(); i++) {
36             if(cats.elementAt(i) instanceof Cat) {
37             ((Cat) cats.elementAt(i)).print();
38             }
39             else {
40                 ((Dog) cats.elementAt(i)).print();
41             }
42                 
43             }
44 }
45 }

 

 1 //示例程式2
 2 import java.util.*;
 3 
 4 public class Stacks {
 5     static String[] months = { "1", "2", "3", "4" };
 6 
 7     public static void main(String[] args) {
 8         Stack stk = new Stack();
 9         for (int i = 0; i < months.length; i++)
10             stk.push(months[i]);
11         System.out.println(stk);
12         System.out.println("element 2=" + stk.elementAt(2));
13         while (!stk.empty())
14             System.out.println(stk.pop());
15     }
16 }

 

 1 //示例程式3
 2 import java.util.*;
 3 
 4 class Counter {
 5     int i = 1;
 6 
 7     public String toString() {
 8         return Integer.toString(i);
 9     }
10 }
11 
12 public class Statistics {
13     public static void main(String[] args) {
14         Hashtable ht = new Hashtable();
15         for (int i = 0; i < 10000; i++) {
16             Integer r = new Integer((int) (Math.random() * 20));
17             if (ht.containsKey(r))
18                 ((Counter) ht.get(r)).i++;
19             else
20                 ht.put(r, new Counter());
21         }
22         System.out.println(ht);
23     }
24 }

 

 

 

測試程式2:

1.使用JDK命令編輯執行ArrayListDemo和LinkedListDemo兩個程式,結合程式執行結果理解程式;

 1 import java.util.*;
 2 
 3 public class ArrayListDemo {
 4     public static void main(String[] argv) {
 5         ArrayList al = new ArrayList();
 6         // Add lots of elements to the ArrayList...
 7         al.add(new Integer(11));
 8         al.add(new Integer(12));
 9         al.add(new Integer(13));
10         al.add(new String("hello"));
11         // First print them out using a for loop.
12         System.out.println("Retrieving by index:");
13         for (int i = 0; i < al.size(); i++) {
14             System.out.println("Element " + i + " = " + al.get(i));
15         }
16     }
17 }

 

 1 import java.util.*;
 2 public class LinkedListDemo {
 3     public static void main(String[] argv) {
 4         LinkedList l = new LinkedList();
 5         l.add(new Object());
 6         l.add("Hello");
 7         l.add("zhangsan");
 8         ListIterator li = l.listIterator(0);
 9         while (li.hasNext())
10             System.out.println(li.next());
11         if (l.indexOf("Hello") < 0)   
12             System.err.println("Lookup does not work");
13         else
14             System.err.println("Lookup works");
15    }
16 }

 

2.在Elipse環境下編輯執行除錯教材360頁程式9-1,結合程式執行結果理解程式;

 1 package linkedList;
 2 
 3 import java.util.*;
 4 
 5 /**
 6  * This program demonstrates operations on linked lists.
 7  * @version 1.11 2012-01-26
 8  * @author Cay Horstmann
 9  */
10 public class LinkedListTest
11 {
12    public static void main(String[] args)
13    {
14       List<String> a = new LinkedList<>();
15       a.add("Amy");
16       a.add("Carl");
17       a.add("Erica");
18 
19       List<String> b = new LinkedList<>();
20       b.add("Bob");
21       b.add("Doug");
22       b.add("Frances");
23       b.add("Gloria");
24 
25       // 將單詞從B合併為A
26 
27       ListIterator<String> aIter = a.listIterator();
28       Iterator<String> bIter = b.iterator();
29 
30       while (bIter.hasNext())
31       {
32          if (aIter.hasNext()) aIter.next();
33          aIter.add(bIter.next());
34       }
35 
36       System.out.println(a);
37 
38       // 從B中刪除每個第二個單詞
39 
40       bIter = b.iterator();
41       while (bIter.hasNext())
42       {
43          bIter.next(); // 跳過一個元素
44          if (bIter.hasNext())
45          {
46             bIter.next(); // 跳過下一個元素
47             bIter.remove(); // 刪除該元素
48          }
49       }
50 
51       System.out.println(b);
52 
53       // 批量操作:從A中刪除B中的所有單詞
54 
55       a.removeAll(b);
56 
57       System.out.println(a);
58    }
59 }

 

 

3.掌握ArrayList、LinkList兩個類的用途及常用API。

測試程式3:

1.執行SetDemo程式,結合執行結果理解程式;

 1 import java.util.*;
 2 public class SetDemo {
 3     public static void main(String[] argv) {
 4         HashSet h = new HashSet(); //也可以 Set h=new HashSet()
 5         h.add("One");
 6         h.add("Two");
 7         h.add("One"); // DUPLICATE
 8         h.add("Three");
 9         Iterator it = h.iterator();
10         while (it.hasNext()) {
11              System.out.println(it.next());
12         }
13     }
14 }

 

2.在Elipse環境下除錯教材365頁程式9-2,結合執行結果理解程式;瞭解HashSet類的用途及常用API。

 

 1 package set;
 2 
 3 import java.util.*;
 4 
 5 /**
 6  * This program uses a set to print all unique words in System.in.
 7  * @version 1.12 2015-06-21
 8  * @author Cay Horstmann
 9  */
10 public class SetTest
11 {
12    public static void main(String[] args)
13    {
14       Set<String> words = new HashSet<>(); //  SETHASSET實現
15       long totalTime = 0;
16 
17       try (Scanner in = new Scanner(System.in))
18       {
19          while (in.hasNext())
20          {
21             String word = in.next();
22             long callTime = System.currentTimeMillis();
23             words.add(word);
24             callTime = System.currentTimeMillis() - callTime;
25             totalTime += callTime;
26          }
27       }
28 
29       Iterator<String> iter = words.iterator();
30       for (int i = 1; i <= 20 && iter.hasNext(); i++)
31          System.out.println(iter.next());
32       System.out.println(". . .");
33       System.out.println(words.size() + " distinct words. " + totalTime + " milliseconds.");
34    }
35 }

 

 

 

 

3.在Elipse環境下除錯教材367頁-368程式9-3、9-4,結合程式執行結果理解程式;瞭解TreeSet類的用途及常用API。

 

 1 package treeSet;
 2 
 3 import java.util.*;
 4 
 5 /**
 6  * An item with a description and a part number.
 7  */
 8 public class Item implements Comparable<Item>
 9 {
10    private String description;
11    private int partNumber;
12 
13    /**
14     * Constructs an item.
15     * 
16     * @param aDescription
17     *           the item's description
18     * @param aPartNumber
19     *           the item's part number
20     */
21    public Item(String aDescription, int aPartNumber)
22    {
23       description = aDescription;
24       partNumber = aPartNumber;
25    }
26 
27    /**
28     * Gets the description of this item.
29     * 
30     * @return the description
31     */
32    public String getDescription()
33    {
34       return description;
35    }
36 
37    public String toString()
38    {
39       return "[description=" + description + ", partNumber=" + partNumber + "]";
40    }
41 
42    public boolean equals(Object otherObject)
43    {
44       if (this == otherObject) return true;
45       if (otherObject == null) return false;
46       if (getClass() != otherObject.getClass()) return false;
47       Item other = (Item) otherObject;
48       return Objects.equals(description, other.description) && partNumber == other.partNumber;
49    }
50 
51    public int hashCode()
52    {
53       return Objects.hash(description, partNumber);
54    }
55 
56    public int compareTo(Item other)
57    {
58       int diff = Integer.compare(partNumber, other.partNumber);
59       return diff != 0 ? diff : description.compareTo(other.description);
60    }
61 }

 

 1 package treeSet;
 2 
 3 import java.util.*;
 4 
 5 /**
 6  * This program sorts a set of item by comparing their descriptions.
 7  * @version 1.12 2015-06-21
 8  * @author Cay Horstmann
 9  */
10 public class TreeSetTest
11 {
12    public static void main(String[] args)
13    {
14       SortedSet<Item> parts = new TreeSet<>();
15       parts.add(new Item("Toaster", 1234));
16       parts.add(new Item("Widget", 4562));
17       parts.add(new Item("Modem", 9912));
18       System.out.println(parts);
19 
20       NavigableSet<Item> sortByDescription = new TreeSet<>(
21             Comparator.comparing(Item::getDescription));
22 
23       sortByDescription.addAll(parts);
24       System.out.println(sortByDescription);
25    }
26 }

 

 

測試程式4:

1.使用JDK命令執行HashMapDemo程式,結合程式執行結果理解程式;

 1 import java.util.*;
 2 public class HashMapDemo {
 3    public static void main(String[] argv) {
 4       HashMap h = new HashMap();
 5       // The hash maps from company name to address.
 6       h.put("Adobe", "Mountain View, CA");
 7       h.put("IBM", "White Plains, NY");
 8       h.put("Sun", "Mountain View, CA");
 9       String queryString = "Adobe";
10       String resultString = (String)h.get(queryString);
11       System.out.println("They are located in: " +  resultString);
12   }
13 }

 

2.在Elipse環境下除錯教材373頁程式9-6,結合程式執行結果理解程式;

 

 1 package map;
 2 
 3 /**
 4  * A minimalist employee class for testing purposes.
 5  */
 6 public class Employee
 7 {
 8    private String name;
 9    private double salary;
10 
11    /**
12     * Constructs an employee with $0 salary.
13     * @param n the employee name
14     */
15    public Employee(String name)
16    {
17       this.name = name;
18       salary = 0;
19    }
20 
21    public String toString()
22    {
23       return "[name=" + name + ", salary=" + salary + "]";
24    }
25 }

 

 1 package map;
 2 
 3 import java.util.*;
 4 
 5 /**
 6  * This program demonstrates the use of a map with key type String and value type Employee.
 7  * @version 1.12 2015-06-21
 8  * @author Cay Horstmann
 9  */
10 public class MapTest
11 {
12    public static void main(String[] args)
13    {
14       Map<String, Employee> staff = new HashMap<>();
15       staff.put("144-25-5464", new Employee("Amy Lee"));
16       staff.put("567-24-2546", new Employee("Harry Hacker"));
17       staff.put("157-62-7935", new Employee("Gary Cooper"));
18       staff.put("456-62-5527", new Employee("Francesca Cruz"));
19 
20       // print all entries
21 
22       System.out.println(staff);
23 
24       // remove an entry
25 
26       staff.remove("567-24-2546");
27 
28       // replace an entry
29 
30       staff.put("456-62-5527", new Employee("Francesca Miller"));
31 
32       // look up a value
33 
34       System.out.println(staff.get("157-62-7935"));
35 
36       // iterate through all entries
37 
38       staff.forEach((k, v) -> 
39          System.out.println("key=" + k + ", value=" + v));
40    }
41 }

 

 

3.瞭解HashMap、TreeMap兩個類的用途及常用API。

實驗2:結對程式設計練習:

1.關於結對程式設計:以下圖片是一個結對程式設計場景:兩位學習夥伴坐在一起,面對著同一臺顯示器,使用著同一鍵盤,同一個滑鼠,他們一起思考問題,一起分析問題,一起編寫程式。

2.關於結對程式設計的闡述可參見以下連結:

http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html

http://en.wikipedia.org/wiki/Pair_programming

3.對於結對程式設計中程式碼設計規範的要求參考:

http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html

 

以下實驗,就讓我們來體驗一下結對程式設計的魅力。

1.確定本次實驗結對程式設計合作伙伴;

我的小夥伴為:王志成

2.各自執行合作伙伴實驗九程式設計練習1,結合使用體驗對所執行程式提出完善建議;

3.各自執行合作伙伴實驗十程式設計練習2,結合使用體驗對所執行程式提出完善建議;

程式互測概述:

  我和小夥伴互相測試了對方的實驗九程式設計練習1程式,小夥伴的程式基本要求都能達到,就是在檔案的讀取上面還有些欠缺,但是在後面的共同學習中他很好的改了過來。實驗十程式設計練習2中基本功能要求也同樣能實現,只是在除法上面有點缺陷沒有很好地實現實數運算。

程式互測心得:

  通過本次和小夥伴的程式互測體驗,其好處在於幫助別人發現問題的同時還可反思自己的程式,認識自己的不足。而且很有效的提升了自己閱讀程式碼的能力。

4.採用結對程式設計方式,與學習夥伴合作完成實驗九程式設計練習1;

結對程式設計程式碼;

  1 package jiedui_bianchen;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.File;
  5 import java.io.FileInputStream;
  6 import java.io.FileNotFoundException;
  7 import java.io.IOException;
  8 import java.io.InputStreamReader;
  9 import java.util.ArrayList;
 10 import java.util.Scanner;
 11 import java.util.Collections;
 12 
 13 public class ID {
 14 
 15     public static People findPeopleByname(String name) {
 16         People flag = null;
 17         for (People people : peoplelist) {
 18             if(people.getName().equals(name)) {
 19                 flag = people;
 20             }
 21         }
 22         return flag;
 23 
 24     }
 25 
 26     public static People findPeopleByid(String id) {
 27         People flag = null;
 28         for (People people : peoplelist) {
 29             if(people.getnumber().equals(id)) {
 30                 flag = people;
 31             }
 32         }
 33         return flag;
 34 
 35     }
 36      
 37     private static ArrayList<People> agenear(int yourage) {
 38         // TODO Auto-generated method stub
 39         int j=0,min=53,d_value=0,k = 0;
 40         ArrayList<People> plist = new ArrayList<People>();
 41         for (int i = 0; i < peoplelist.size(); i++) {
 42             d_value = peoplelist.get(i).getage() > yourage ? 
 43                     peoplelist.get(i).getage() - yourage : yourage - peoplelist.get(i).getage() ;
 44             k = d_value < min ? i : k;
 45             min = d_value < min ? d_value : min;
 46         }
 47         for(People people : peoplelist) {
 48             if(people.getage() == peoplelist.get(k).getage()) {
 49                 plist.add(people);
 50             }
 51         }
 52         return plist;
 53     }
 54 
 55     private static ArrayList<People> peoplelist; 
 56     
 57     public static void main(String[] args) //throws  IOException
 58     {
 59         peoplelist = new ArrayList<People>();
 60         Scanner scanner = new Scanner(System.in);
 61         File file = new File("D:\\身份證號.txt");
 62         try {
 63             FileInputStream files = new FileInputStream(file);
 64             BufferedReader in = new BufferedReader(new InputStreamReader(files));
 65             String temp = null;
 66             while ((temp = in.readLine()) != null) {
 67                 
 68                 String[] information = temp.split("[ ]+");
 69                 People people = new People();
 70                 people.setName(information[0]);
 71                 people.setnumber(information[1]);
 72                 int A = Integer.parseInt(information[3]);
 73                 people.setage(A);
 74                 people.setsex(information[2]);
 75                 for(int j = 4; j<information.length;j++) {
 76                     people.setplace(information[j]);
 77                 }
 78                 peoplelist.add(people);
 79 
 80             }
 81         } catch (FileNotFoundException e) {
 82             System.out.println("檔案未找到");
 83             e.printStackTrace();
 84         } catch (IOException e) {
 85             System.out.println("檔案讀取錯誤");
 86             e.printStackTrace();
 87         }
 88         boolean isTrue = true;
 89         while (isTrue) {
 90 
 91             System.out.println("******************************************");
 92             System.out.println("   1.按姓名典序輸出人員資訊");
 93             System.out.println("   2.查詢最大年齡人員資訊");
 94             System.out.println("   3.查詢最小年齡人員資訊");
 95             System.out.println("   4.輸入你的年齡,查詢身份證號.txt中年齡與你最近的人");
 96             System.out.println("   5.查詢人員中是否有你的同鄉");
 97             System.out.println("   6.退出");
 98             System.out.println("******************************************");
 99             int nextInt = scanner.nextInt();
100             switch (nextInt) {
101             case 1:
102                 Collections.sort(peoplelist);
103                 System.out.println(peoplelist.toString());
104                 break;
105             case 2:
106                 int max=0;
107                 int j,k1 = 0;
108                 for(int i=1;i<peoplelist.size();i++)
109                 {
110                     j = peoplelist.get(i).getage();
111                    if(j>max)
112                    {
113                        max = j; 
114                        k1 = i;
115                    }
116                   
117                 }  
118                 System.out.println("年齡最大:"+peoplelist.get(k1));
119                 break;
120             case 3:
121                 int min = 100;
122                 int j1,k2 = 0;
123                 for(int i=1;i<peoplelist.size();i++)
124                 {
125                     j1 = peoplelist.get(i).getage();
126                     if(j1<min)
127                     {
128                         min = j1; 
129                         k2 = i;
130                     }
131 
132                  } 
133                 System.out.println("年齡最小:"+peoplelist.get(k2));
134                 break;
135             case 4:
136                 System.out.println("年齡:");
137                 int input_age = scanner.nextInt();
138                 ArrayList<People> plist = new ArrayList<People>();
139                 plist = agenear(input_age);
140                 for(People people : plist) {
141                     System.out.println(people.toString());
142                 }
143                 break;
144             case 5:
145                 System.out.println("請輸入省份");
146                 String find = scanner.next();        
147                 for (int i = 0; i <peoplelist.size(); i++) 
148                 {
149                     String [] place = peoplelist.get(i).getplace().split("\t");
150                     for(String temp : place) {
151                         if(find.equals(temp)) {
152                             System.out.println("你的同鄉是    "+peoplelist.get(i));
153                             break;
154                         }
155                     }
156                     
157                 } 
158                 break;
159             case 6:
160                 isTrue = false;
161                 System.out.println("byebye!");
162                 break;
163             default:
164                 System.out.println("輸入有誤");
165             }
166         }
167     }
168 
169 }

 

結對程式執行功能介面截圖;

 

結對過程描述,提供兩人在討論、細化和程式設計時的結對照片(非擺拍)。

 

 

5.採用結對程式設計方式,與學習夥伴合作完成實驗十程式設計練習2。

 

結對程式設計程式碼;

  1 import java.io.File;
  2 import java.io.FileOutputStream;
  3 import java.io.PrintWriter;
  4 import java.math.BigDecimal;
  5 import java.util.Scanner;
  6 
  7 
  8 public class ss {
  9     public static void main(String[] args) {
 10 
 11 
 12         Scanner in = new Scanner(System.in);
 13         Calculator<Integer> sf = new Calculator<Integer>();
 14         File file = new File("wzt.txt");
 15         if(file.exists()) {
 16             System.out.println("檔案已存在");
 17         }
 18         PrintWriter output = null;
 19         try {
 20             output = new PrintWriter(new FileOutputStream(file));
 21         } catch (Exception e) {
 22             //e.printStackTrace();
 23         }
 24         int sum = 0;
 25         
 26         System.out.println("計算結果保留兩位小數");
 27         for (int i = 1; i < 11; i++) {
 28             int a = (int) Math.round(Math.random() * 100);
 29                 int b = (int) Math.round(Math.random() * 100);
 30                 int s = (int) Math.round(Math.random() * 3);
 31 
 32             
 33            switch(s)
 34            {
 35            case 1:
 36                System.out.println(i+": "+a+"/"+b+"=");
 37                Number c = in.nextDouble();
 38                output.println(a+"/"+b+"="+c);
 39                Number g = sf.division(a, b);
 40                BigDecimal division = new BigDecimal(g.doubleValue());
 41                g = division.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
 42                if (c.equals(g)) {
 43                    sum += 10;
 44                    System.out.println("恭喜答案正確");
 45                }
 46                else {
 47                    System.out.println("抱歉,答案錯誤");
 48                }
 49             
 50                break;
 51             
 52            case 2:
 53                System.out.println(i+": "+a+"*"+b+"=");
 54                Number c1 = in.nextDouble();
 55                output.println(a+"*"+b+"="+c1);
 56                Number g1 = sf.mulitiplication(a, b);
 57                BigDecimal mul = new BigDecimal(g1.doubleValue());
 58                g1 = mul.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
 59                if (c1.equals(g1) ){
 60                    sum += 10;
 61                    System.out.println("恭喜答案正確");
 62                }
 63                else {
 64                    System.out.println("抱歉,答案錯誤");
 65                }
 66                break;
 67            case 3:
 68                System.out.println(i+": "+a+"+"+b+"=");
 69                Number c2 = in.nextDouble();
 70                output.println(a+"+"+b+"="+c2);
 71                Number g2 =sf.addition(a, b);
 72                BigDecimal add = new BigDecimal(g2.doubleValue());
 73                g2 = add.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
 74                if (c2.equals(g2)) {
 75                    sum += 10;
 76                    System.out.println("恭喜答案正確");
 77                }
 78                else {
 79                    System.out.println("抱歉,答案錯誤");
 80                }
 81                
 82                break ;
 83            case 4:
 84                System.out.println(i+": "+a+"-"+b+"=");
 85                Number c3 = in.nextDouble();
 86                output.println(a+"-"+b+"="+c3);
 87                Number g3 = sf.subtraction(a, b);
 88                BigDecimal sub = new BigDecimal(g3.doubleValue());
 89                g3 = sub.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
 90                if (c3.equals(g3)) {
 91                    sum += 10;
 92                    System.out.println("恭喜答案正確");
 93                }
 94                else {
 95                    System.out.println("抱歉,答案錯誤");
 96                }
 97                break ;
 98 
 99                } 
100     
101           }
102         System.out.println("成績"+sum);
103         output.println("成績:"+sum);
104         output.close();
105         in.close();
106          
107     }
108 }

 

結對程式執行功能介面截圖;

 

結對過程描述,提供兩人在討論、細化和程式設計時的結對照片(非擺拍)。

 

 

 

第三部分:總結

  在本週的學習過程中,複習了上週內容即泛型程式設計的知識,學習了新的關於集合類的知識,理解了一些常用API的用途。在實驗方面通過結對程式設計,在小夥伴的幫助下認識了自己的不足,提升了自己的閱讀程式碼的能力。