1. 程式人生 > >楊其菊/常惠琢《面向物件程式設計(java)》第十一週學習總結

楊其菊/常惠琢《面向物件程式設計(java)》第十一週學習總結

                                                                                                                             《面向物件程式設計》第十一週學習總結

第一部分:理論知識

JAVA的集合框架
 JAVA的集合框架實現對各種資料結構的封裝,以降低對資料管理與處理的難度。
 所謂框架就是一個類庫的集合,框架中包含很多超類,程式設計者建立這些超類的子類可較方便的設計設計程式所需的類。例如:Swing類包
 集合(Collection或稱為容器)是一種包含多個元素並提供對所包含元素操作方法的類,其包含的元素可以由同一型別的物件組成,也可以由不同型別的物件組成。
 集合框架:JAVA集合類庫的統一架構

集合類的作用
 集合類的作用:
– Java的集合類提供了一些基本資料結構的支援。
– 例如Vector、Hashtable、Stack等。集合類的使用:
– Java的集合類包含在java.util包中。
– import java.util.*;

集合類的特點
 特點一:
– 只容納物件。
注意:陣列可以容納基本資料型別資料和物件。
– 如果集合類中想使用基本資料型別,又想利用集合類的靈活性,可以把基本資料型別資料封裝成該資料型別的包裝器物件,然後放入集合中處理。

集合類的特點
 特點一:
– 只容納物件。
注意:陣列可以容納基本資料型別資料和物件。
– 如果集合類中想使用基本資料型別,又想利用集合類的靈活性,可以把基本資料型別資料封裝成該資料型別的包裝器物件,然後放入集合中處理。

特點二:
– 集合類容納的物件都是Object類的例項,一旦把一個物件置入集合類中,它的類資訊將丟失,這樣設計的目的是為了集合類的通用性。
– 因為Object類是所有類的祖先,所以可以在這些集合中存放任何類的物件而不受限制,但切記在使用集合成員之前必須對它重新造型。

Vector類
 Vector類類似長度可變的陣列。
 Vector中只能存放物件。
 Vector的元素通過下標進行訪問。
 Vector類關鍵屬性:
– capacity表示集合最多能容納的元素個數。
– capacityIncrement表示每次增加多少容量。
– size表示集合當前元素個數。
Vector v = new Vector(100)

 Vector類的關鍵方法:
– void addElement(Object obj)
– void add(int index, Object element)
– Object elementAt(int index)
– void insertElementAt(Object obj, int index)

Hashtable類
 Hashtable通過鍵來查詢元素。
 Hashtable用雜湊碼(hashcode)來確定鍵。所有物件都有一個雜湊碼,可以通過Object類的hashCode()方法獲得。

集合框架中的基本介面
 Collection:集合層次中的根介面,JDK未提供這個介面的直接實現類。
 Set:不能包含重複的元素。物件可能不是按存放的次序存放,也就是說不能像陣列一樣按索引的方式進行訪問,SortedSet是一個按照升序排列元素的Set。
 List:是一個有序的集合,可以包含重複的元素。提供了按索引訪問的方式。
 Map:包含了key-value對。Map不能包含重複的key。
 SortedMap是一個按照升序排列key的Map。

List(教材361頁)
 List的明顯特徵是它的元素都有一個確定的順序。
 實現它的類有ArrayList和LinkedList。
– ArrayList中的元素在記憶體中是順序儲存的。
– LinkedList中的元素在記憶體中是以連結串列方式儲存的。

ArrayList(見教材178頁)和linkedList (見教材362頁)
 ArrayList:可以將其看作是能夠自動增長容量的陣列。利用ArrayList的toArray()返回一個數組。
 Arrays.asList()返回一個列表。
 LinkedList是採用雙向迴圈連結串列實現的。
 利用LinkedList實現棧(stack)、佇列(queue)、雙向佇列(double-ended queue )。
 ArrayList底層採用陣列完成,而LinkedList則是以一般的 雙向連結串列(double-linked list)完成,其內每個物件除了資料 本身外,還有兩個引用,分別指向前一個元素和後一個元 素。
 如果經常在 List 中進行插入和刪除操作,應該使用LinkedList,否則,使用ArrayList將更加快速。

Set
 Set中的元素必須唯一。
 新增到Set中的物件元素必須定義equals方法,以提供演算法來判斷欲新增進來的物件是否與已經存在的某物件相等,從而建立物件的唯一性。
 實 現 Set 介面的類有HashSet,TreeSet

HashSet(教材365頁)
TreeSet(教材369頁)
 TreeSet是一個有序集合,TreeSet中元素將按照升序排列,預設是按照自然順序進行排列,意味著TreeSet中元素要實現Comparable介面。
 可以在構造 TreeSet 物件時,傳遞實現了Comparator介面的比較器物件。
 HashSet是基於Hash演算法實現的,其效能通常都優於TreeSet。通常使用HashSet,需要排序的功能時,使用TreeSet。

Map定義
 對映(map)是一個儲存關鍵字和值的關聯或關鍵字/值對的物件。給定一個關鍵字,可以得到它的值。關鍵字和值都是物件。關鍵字必須是唯一的。但值是 可以被複制的。
 Map介面對映唯一關鍵字到值。關鍵字(key)是以 後用於檢索值的物件。給定一個關鍵字和一個值,可 以儲存這個值到一個Map物件中。當這個值被儲存以 後,就可以使用它的關鍵字來檢索它
 Map迴圈使用兩個基本操作:get( )和put( )。使用put( )方法可以將一個指定了關鍵字和值的值加入映 射。為了得到值,可以通過將關鍵字作為引數來呼叫get( )方法。呼叫返回該值。

實驗十一   集合

實驗時間 2018-11-8

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:

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

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

//示例程式1

import java.util.Vector;

 

class Cat {

private int catNumber;

 

Cat(int i) {

catNumber = i;

}

 

void print() {

System.out.println("Cat #" + catNumber);

}

}

 

class Dog {

private int dogNumber;

 

Dog(int i) {

dogNumber = i;

}

 

void print() {

System.out.println("Dog #" + dogNumber);

}

}

 

public class CatsAndDogs {

public static void main(String[] args) {

Vector cats = new Vector();

for (int i = 0; i < 7; i++)

cats.addElement(new Cat(i));

cats.addElement(new Dog(7));

for (int i = 0; i < cats.size(); i++)

((Cat) cats.elementAt(i)).print();

}

}

//示例程式2

import java.util.*;

 

public class Stacks {

static String[] months = { "1", "2", "3", "4" };

 

public static void main(String[] args) {

Stack stk = new Stack();

for (int i = 0; i < months.length; i++)

stk.push(months[i]);

System.out.println(stk);

System.out.println("element 2=" + stk.elementAt(2));

while (!stk.empty())

System.out.println(stk.pop());

}

}

//示例程式3

import java.util.*;

 

class Counter {

int i = 1;

 

public String toString() {

return Integer.toString(i);

}

}

 

public class Statistics {

public static void main(String[] args) {

Hashtable ht = new Hashtable();

for (int i = 0; i < 10000; i++) {

Integer r = new Integer((int) (Math.random() * 20));

if (ht.containsKey(r))

((Counter) ht.get(r)).i++;

else

ht.put(r, new Counter());

}

System.out.println(ht);

}

}

示例程式1:

 1 package first;
 2 //示例程式1
 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             {
37             if(cats.elementAt(i) instanceof Cat) {
38             
39                   ((Cat) cats.elementAt(i)).print();}
40                         
41             else
42             {
43                  ((Dog) cats.elementAt(i)).print();
44             }
45             }
46     }
47 }

 

示例程式2:

示例程式3

命令列:

Elipse

 

測試程式2:

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

import java.util.*;

 

public class ArrayListDemo {

public static void main(String[] argv) {

ArrayList al = new ArrayList();

// Add lots of elements to the ArrayList...

al.add(new Integer(11));

al.add(new Integer(12));

al.add(new Integer(13));

al.add(new String("hello"));

// First print them out using a for loop.

System.out.println("Retrieving by index:");

for (int i = 0; i < al.size(); i++) {

System.out.println("Element " + i + " = " + al.get(i));

}

}

}

import java.util.*;

public class LinkedListDemo {

    public static void main(String[] argv) {

        LinkedList l = new LinkedList();

        l.add(new Object());

        l.add("Hello");

        l.add("zhangsan");

        ListIterator li = l.listIterator(0);

        while (li.hasNext())

            System.out.println(li.next());

        if (l.indexOf("Hello") < 0)   

            System.err.println("Lookup does not work");

        else

            System.err.println("Lookup works");

   }

}

 

(1)

 

(2)

 

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

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

 

測試程式3:

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

import java.util.*;

public class SetDemo {

    public static void main(String[] argv) {

        HashSet h = new HashSet(); //也可以 Set h=new HashSet()

        h.add("One");

        h.add("Two");

        h.add("One"); // DUPLICATE

        h.add("Three");

        Iterator it = h.iterator();

        while (it.hasNext()) {

             System.out.println(it.next());

        }

    }

}

 

 

(1)SetDemo:

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

(2)

 1 package C;
 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<>(); // HashSet implements Set
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 }

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

(3)TreeSet

 1 package B;
 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 }
 1 package B;
 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 }

 

測試程式4:

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

import java.util.*;

public class HashMapDemo {

   public static void main(String[] argv) {

      HashMap h = new HashMap();

      // The hash maps from company name to address.

      h.put("Adobe", "Mountain View, CA");

      h.put("IBM", "White Plains, NY");

      h.put("Sun", "Mountain View, CA");

      String queryString = "Adobe";

      String resultString = (String)h.get(queryString);

      System.out.println("They are located in: " +  resultString);

  }

}

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

 (1)實驗九程式設計練習1

我的(楊其菊)

  1 import java.io.BufferedReader;
  2         import java.io.File;
  3         import java.io.FileInputStream;
  4         import java.io.FileNotFoundException;
  5         import java.io.IOException;
  6         import java.io.InputStreamReader;
  7         import java.util.ArrayList;
  8         import java.util.Arrays;
  9         import java.util.Collections;
 10         import java.util.Scanner;
 11 
 12 
 13 public class Search{
 14 
 15       private static ArrayList<Person> Personlist1;
 16        public static void main(String[] args) {
 17          
 18           Personlist1 = new ArrayList<>();
 19          
 20           Scanner scanner = new Scanner(System.in);
 21           File file = new File("E:\\面向物件程式設計Java\\實驗\\實驗六\\身份證號.txt");
 22    
 23                 try {
 24                      FileInputStream F = new FileInputStream(file);
 25                      BufferedReader in = new BufferedReader(new InputStreamReader(F));
 26                      String temp = null;
 27                      while ((temp = in.readLine()) != null) {
 28                         
 29                         Scanner linescanner = new Scanner(temp);
 30                         
 31                         linescanner.useDelimiter(" ");    
 32                         String name = linescanner.next();
 33                         String id = linescanner.next();
 34                         String sex = linescanner.next();
 35                         String age = linescanner.next();
 36                         String place =linescanner.nextLine();
 37                         Person Person = new Person();
 38                         Person.setname(name);
 39                         Person.setid(id);
 40                         Person.setsex(sex);
 41                         int a = Integer.parseInt(age);
 42                         Person.setage(a);
 43                         Person.setbirthplace(place);
 44                         Personlist1.add(Person);
 45 
 46                     }
 47                 } catch (FileNotFoundException e) {
 48                     System.out.println("查詢不到資訊");
 49                     e.printStackTrace();
 50                 } catch (IOException e) {
 51                     System.out.println("資訊讀取有誤");
 52                     e.printStackTrace();
 53                 }
 54                 boolean isTrue = true;
 55                 while (isTrue) {
 56                     System.out.println("******************************************");
 57                     System.out.println("1:按姓名字典順序輸出資訊;");
 58                     System.out.println("2:查詢最大年齡與最小年齡人員資訊;");
 59                     System.out.println("3:按省份找你的同鄉;");
 60                     System.out.println("4:輸入你的年齡,查詢年齡與你最近人的資訊;");
 61                     System.out.println("5:退出");
 62                     System.out.println("******************************************");
 63                     int type = scanner.nextInt();
 64                     switch (type) {
 65                     case 1:
 66                         Collections.sort(Personlist1);
 67                         System.out.println(Personlist1.toString());
 68                         break;
 69                     case 2:
 70                         
 71                         int max=0,min=100;int j,k1 = 0,k2=0;
 72                         for(int i=1;i<Personlist1.size();i++)
 73                         {
 74                             j=Personlist1.get(i).getage();
 75                            if(j>max)
 76                            {
 77                                max=j; 
 78                                k1=i;
 79                            }
 80                            if(j<min)
 81                            {
 82                                min=j; 
 83                                k2=i;
 84                            }
 85 
 86                         }  
 87                         System.out.println("年齡最大:"+Personlist1.get(k1));
 88                         System.out.println("年齡最小:"+Personlist1.get(k2));
 89                         break;
 90                     case 3:
 91                         System.out.println("place?");
 92                         String find = scanner.next();        
 93                         String place=find.substring(0,3);
 94                         String place2=find.substring(0,3);
 95                         for (int i = 0; i <Personlist1.size(); i++) 
 96                         {
 97                             if(Personlist1.get(i).getbirthplace().substring(1,4).equals(place)) 
 98                             {
 99                                 System.out.println("你的同鄉:"+Personlist1.get(i));
100                             }
101                         } 
102 
103                         break;
104                     case 4:
105                         System.out.println("年齡:");
106                         int yourage = scanner.nextInt();
107                         int close=ageclose(yourage);
108                         int d_value=yourage-Personlist1.get(close).getage();
109                         System.out.println(""+Personlist1.get(close));
110                   
111                         break;
112                     case 5:
113                    isTrue = false;
114                    System.out.println("再見!");
115                         break;
116                     default:
117                         System.out.println("輸入有誤");
118                     }
119                 }
120             }
121             public static int ageclose(int age) {
122                    int m=0;
123                 int    max=53;
124                 int d_value=0;
125                 int k=0;
126                 for (int i = 0; i < Personlist1.size(); i++)
127                 {
128                     d_value=Personlist1.get(i).getage()-age;
129                     if(d_value<0) d_value=-d_value; 
130                     if (d_value<max) 
131                     {
132                        max=d_value;
133                        k=i;
134                     }
135 
136                  }    return k;
137                 
138              }
139 
140    
141 
142  }
143 
144 
145 
146 
147 
148 
149 
150 
151 //jiekouwenjiaan
152 
153 
154 public class Person implements Comparable<Person> {
155             private String name;
156             private String id;
157             private int age;
158             private String sex;
159             private String birthplace;
160 
161     public String getname() {
162         return name;
163         }
164     public void setname(String name) {
165         this.name = name;
166     }
167     public String getid() {
168         return id;
169     }
170     public void setid(String id) {
171         this.id= id;
172     }
173     public int getage() {
174     
175         return age;
176     }
177     public void setage(int age) {
178         // int a = Integer.parseInt(age);
179         this.age= age;
180     }
181     public String getsex() {
182         return sex;
183     }
184     public void setsex(String sex) {
185         this.sex= sex;
186     }
187     public String getbirthplace() {
188         return birthplace;
189     }
190     public void setbirthplace(String birthplace) {
191         this.birthplace= birthplace;
192 }
193 
194     public int compareTo(Person o) {
195         return this.name.compareTo(o.getname());
196 
197 }
198 
199     public String toString() {
200         return  name+"\t"+sex+"\t"+age+"\t"+id+"\t";
201 
202 }
203 
204 
205 
206 }
Search

夥伴(常惠琢):

  1  import java.io.BufferedReader;
  2         import java.io.File;
  3         import java.io.FileInputStream;
  4         import java.io.FileNotFoundException;
  5         import java.io.IOException;
  6         import java.io.InputStreamReader;
  7         import java.util.ArrayList;
  8         import java.util.Arrays;
  9         import java.util.Collections;
 10         import java.util.Scanner;
 11 
 12 public class Test {
 13     private static ArrayList<Student> studentlist;
 14     public static void main(String[] args) {
 15 
 16                 studentlist = new ArrayList<>();
 17                 Scanner scanner = new Scanner(System.in);
 18                 File file = new File("F:\\java\\身份證號.txt");
 19                 try {
 20                     FileInputStream fis = new FileInputStream(file);
 21                     BufferedReader in = new BufferedReader(new InputStreamReader(fis));
 22                     String temp = null;
 23                     while ((temp = in.readLine()) != null) {
 24                         
 25                         Scanner linescanner = new Scanner(temp);
 26                         
 27                         linescanner.useDelimiter(" ");    
 28                         String name = linescanner.next();
 29                         String number = linescanner.next();
 30                         String sex = linescanner.next();
 31                         String age = linescanner.next();
 32                         String province =linescanner.nextLine();
 33                         Student student = new Student();
 34                         student.setName(name);
 35                         student.setnumber(number);
 36                         student.setsex(sex);
 37                         int a = Integer.parseInt(age);
 38                         student.setage(a);
 39                         student.setprovince(province);
 40                         studentlist.add(student);
 41 
 42                     }
 43                 } catch (FileNotFoundException e) {
 44                     System.out.println("找不到學生的資訊檔案");
 45                     e.printStackTrace();
 46                 } catch (IOException e) {
 47                     System.out.println("學生資訊檔案讀取錯誤");
 48                     e.printStackTrace();
 49                 }
 50                 boolean isTrue = true;
 51                 while (isTrue) {
 52                     System.out.println("選擇你的操作, ");
 53                     System.out.println("1.字典排序  ");
 54                     System.out.println("2.輸出年齡最大和年齡最小的人  ");
 55                     System.out.println("3.尋找同鄉  ");
 56                     System.out.println("4.尋找年齡相近的人  ");
 57                     System.out.println("5.退出 ");
 58                     String m = scanner.next();
 59                     switch (m) {
 60                     case "1":
 61                         Collections.sort(studentlist);              
 62                         System.out.println(studentlist.toString());
 63                         break;
 64                     case "2":
 65                          int max=0,min=100;
 66                          int j,k1 = 0,k2=0;
 67                          for(int i=1;i<studentlist.size();i++)
 68                          {
 69                              j=studentlist.get(i).getage();
 70                          if(j>max)
 71                          {
 72                              max=j; 
 73                              k1=i;
 74                          }
 75                          if(j<min)
 76                          {
 77                            min=j; 
 78                            k2=i;
 79                          }
 80                          
 81                          }  
 82                          System.out.println("年齡最大:"+studentlist.get(k1));
 83                          System.out.println("年齡最小:"+studentlist.get(k2));
 84                         break;
 85                     case "3":
 86                          System.out.println("地址?");
 87                          String find = scanner.next();        
 88                          String place=find.substring(0,3);
 89                          for (int i = 0; i <studentlist.size(); i++) 
 90                          {
 91                              if(studentlist.get(i).getprovince().substring(1,4).equals(place)) 
 92                                  System.out.println("同鄉"+studentlist.get(i));
 93                          }             
 94                          break;
 95                          
 96                     case "4":
 97                         System.out.println("年齡:");
 98                         int yourage = scanner.nextInt();
 99                         int near=agenear(yourage);
100                         int value=yourage-studentlist.get(near).getage();
101                         System.out.println(""+studentlist.get(near));
102                         break;
103                     case "5 ":
104                         isTrue = false;
105                         System.out.println("退出程式!");
106                         break;
107                         default:
108                         System.out.println("輸入有誤");
109 
110                     }
111                 }
112             }
113                 public static int agenear(int age) {      
114                 int j=0,min=53,value=0,ok=0;
115                  for (int i = 0; i < studentlist.size(); i++)
116                  {
117                      value=studentlist.get(i).getage()-age;
118                      if(value<0) value=-value; 
119                      if (value<min) 
120                      {
121                         min=value;
122                          ok=i;
123                      } 
124                   }    
125                  return ok;         
126               }
127         }
Main
  1  import java.io.BufferedReader;
  2         import java.io.File;
  3         import java.io.FileInputStream;
  4         import java.io.FileNotFoundException;
  5         import java.io.IOException;
  6         import java.io.InputStreamReader;
  7         import java.util.ArrayList;
  8         import java.util.Arrays;
  9         import java.util.Collections;
 10         import java.util.Scanner;
 11 
 12 public class Test {
 13     private static ArrayList<Student> studentlist;
 14     public static void main(String[] args) {
 15 
 16                 studentlist = new ArrayList<>();
 17                 Scanner scanner = new Scanner(System.in);
 18                 File file = new File("F:\\java\\身份證號.txt");
 19                 try {
 20                     FileInputStream fis = new FileInputStream(file);
 21                     BufferedReader in = new BufferedReader(new InputStreamReader(fis));
 22                     String temp = null;
 23                     while ((temp = in.readLine()) != null) {
 24                         
 25                         Scanner linescanner = new Scanner(temp);
 26                         
 27                         linescanner.useDelimiter(" ");    
 28                         String name = linescanner.next();
 29                         String number = linescanner.next();
 30                         String sex = linescanner.next();
 31                         String age = linescanner.next();
 32                         String province =linescanner.nextLine();
 33                         Student student = new Student();
 34                         student.setName(name);
 35                         student.setnumber(number);
 36                         student.setsex(sex);
 37                         int a = Integer.parseInt(age);
 38                         student.setage(a);
 39                         student.setprovince(province);
 40                         studentlist.add(student);
 41 
 42                     }
 43                 } catch (FileNotFoundException e) {
 44                     System.out.println("找不到學生的資訊檔案");
 45                     e.printStackTrace();
 46                 } catch (IOException e) {
 47                     System.out.println("學生資訊檔案讀取錯誤");
 48                     e.printStackTrace();
 49                 }
 50                 boolean isTrue = true;
 51                 while (isTrue) {
 52                     System.out.println("選擇你的操作, ");
 53                     System.out.println("1.字典排序  ");
 54                     System.out.println("2.輸出年齡最大和年齡最小的人  ");
 55                     System.out.println("3.尋找同鄉  ");
 56                     System.out.println("4.尋找年齡相近的人  ");
 57                     System.out.println("5.退出 ");
 58                     String m = scanner.next();
 59                     switch (m) {
 60                     case "1":
 61                         Collections.sort(studentlist);              
 62                         System.out.println(studentlist.toString());
 63                         break;
 64                     case "2":
 65                          int max=0,min=100;
 66                          int j,k1 = 0,k2=0;
 67                          for(int i=1;i<studentlist.size();i++)
 68                          {
 69                              j=studentlist.get(i).getage();
 70                          if(j>max)
 71                          {
 72                              max=j; 
 73                              k1=i;
 74                          }
 75                          if(j<min)
 76                          {
 77                            min=j; 
 78                            k2=i;
 79                          }
 80                          
 81                          }  
 82                          System.out.println("年齡最大:"+studentlist.get(k1));
 83                          System.out.println("年齡最小:"+studentlist.get(k2));
 84                         break;
 85                     case "3":
 86                          System.out.println("地址?");
 87                          String find = scanner.next();        
 88                          String place=find.substring(0,3);
 89                          for (int i = 0; i <studentlist.size(); i++) 
 90                          {
 91                              if(studentlist.get(i).getprovince().substring(1,4).equals(place)) 
 92                                  System.out.println("同鄉"+studentlist.get(i));
 93                          }             
 94                          break;
 95                          
 96                     case "4":
 97                         System.out.println("年齡:");
 98                         int yourage = scanner.nextInt();
 99                         int near=agenear(yourage);
100                         int value=yourage-studentlist.get(near).getage();
101                         System.out.println(""+studentlist.get(near));
102                         break;
103                     case "5 ":
104                         isTrue = false;
105                         System.out.println("退出程式!");
106                         break;
107                         default:
108                         System.out.println("輸入有誤");
109 
110                     }
111                 }
112             }
113                 public static int agenear(int age) {