1. 程式人生 > >王豔 201771010127《面向物件程式設計(java)》第十一週學習總結

王豔 201771010127《面向物件程式設計(java)》第十一週學習總結

一:理論部分。

1.資料結構:分為a.線性資料結構,如線性表、棧、佇列、串、陣列和檔案。

                          b.非線性資料結構,如樹和圖。

1)所有資料元素在同一個線性表中必須是相同的資料型別。

線性表按其儲存結構可分為順序表和連結串列。

2)棧:也是一種特殊的線性表,是一種後進先出(LIFO)的結構。

棧是限定僅在表尾進行插入和刪除運算的線性表,表尾稱為棧頂,表頭稱為棧底。

3)佇列:限定所有的插入只能在表的一端進行,而所有的刪除都在表的另一端進行的線性表。是一種先進先出(FIFO)的結構。

表中允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。

2.集合:(容器)是一種包含多個元素並提供對所包含元素操作方法的類,其包含的元素可以由同一型別的物件組成,也可以由不同型別的物件組成。

1)集合框架:JAVA集合類庫的統一架構。

2)集合類的作用(包含在java.util包中):提供一些基本資料結構的支援,如Vector、Hashtable、Stack等。

3)集合類的特點:a.只容納物件;

                               b.集合類容納的物件都是Object類的例項(一旦把一個物件置入集合類中,它的類資訊將丟失)

4)Vector類:類似長度可變的陣列。它只能存放物件,其元素通過下標進行訪問。

5)Stack類(Vector的子類):它描述堆疊資料結構。(所有物件都有一個雜湊碼,可以通過Object類的hashCode方法獲得。)

3.集合框架中的基本介面:a.Collection(構造類集框架的基礎):集合層次中的根介面,JDK未提供這個介面的直接實現類。

                                           b.Set:不能包含重複的元素,即元素必須唯一。物件可能不是按存放的次序存放。(實 現 Set 介面的類有HashSet,TreeSet)

                                           c.List:有序的集合,可以包含重複的元素。提供了按索引訪問的方式。實現它的類有ArrayList和LinkedLis(如ArrayList:能夠自動增長容量的陣列)

                                           d.Map:Map介面對映唯一關鍵字到值。包含了key-value對。Map不能包含重複的key。SortedMap是一個按照升序排列key的Map。

二:實驗部分。

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();//進行強制型別轉化
    }
}

程式執行結果如下:

由程式執行結果可知,程式在強制轉換型別時出現異常,更改後程序如下:

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++)
            if (cats.elementAt(i) instanceof Cat) //判斷是否能進行強制型別轉換
            {
                ((Cat) cats.elementAt(i)).print();//能進行強制型別轉換,輸出為Cat型
            } else {
                ((Dog) cats.elementAt(i)).print();//不能進行強制型別轉化,輸出為Dog型
            }
    }
}

程式執行結果如下:

示例程式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;//不加許可權修飾符:friendly型

    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));//生成0到20(不包括20)的整型隨機數
            if (ht.containsKey(r))//判斷r是否是雜湊表中一個元素的鍵值
                ((Counter) ht.get(r)).i++;//通過get方法獲得其值
            else
                ht.put(r, new Counter());//ht不存在
        }
        System.out.println(ht);
    }
}

程式執行結果如下:

 

測試程式2:

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

ArrayListDemo:

import java.util.*;

public class ArrayListDemo//ArrayList使用了陣列的實現
{
    public static void main(String[] argv) {
        ArrayList al = new ArrayList();
        //在ArrayList中新增大量元素
        al.add(new Integer(11));
        al.add(new Integer(12));
        al.add(new Integer(13));
        al.add(new String("hello"));//下標從0開始,新增4個元素
        // 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));
        }
    }
}

程式執行結果如下:

LinkedListDemo:

程式執行結果如下:

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

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

程式如下:

import java.util.*;

/**
 * This program demonstrates operations on linked lists.
 * @version 1.11 2012-01-26
 * @author Cay Horstmann
 */
public class LinkedListTest
{
   public static void main(String[] args)
   {
       //建立a和b兩個連結串列
      List<String> a = new LinkedList<>();//泛型
      a.add("Amy");
      a.add("Carl");
      a.add("Erica");

      List<String> b = new LinkedList<>();//泛型
      b.add("Bob");
      b.add("Doug");
      b.add("Frances");
      b.add("Gloria");

      //合併a和b中的詞

      ListIterator<String> aIter = a.listIterator();
      Iterator<String> bIter = b.iterator();

      while (bIter.hasNext())
      {
         if (aIter.hasNext()) aIter.next();
         aIter.add(bIter.next());
      }

      System.out.println(a);

      //從第二個連結串列中每隔一個元素刪除一個元素

      bIter = b.iterator();
      while (bIter.hasNext())
      {
         bIter.next(); // skip one element
         if (bIter.hasNext())
         {
            bIter.next(); // skip next element
            bIter.remove(); // remove that element
         }
      }

      System.out.println(b);

      // bulk operation: remove all words in b from a

      a.removeAll(b);

      System.out.println(a);//通過AbstractCollection類中的toString方法打印出連結串列a中的所有元素
   }
}

程式執行結果如下:

測試程式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"); // 複製
        h.add("Three");
        Iterator it = h.iterator();
        while (it.hasNext()) {
             System.out.println(it.next());
        }
    }
}

程式執行結果如下:

 

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

9—3:

import java.util.*;

/**
 * An item with a description and a part number.
 */
public class Item implements Comparable<Item>//介面(泛型)
{
   private String description;
   private int partNumber;

   /**
    * Constructs an item.
    * 
    * @param aDescription
    *           the item's description
    * @param aPartNumber
    *           the item's part number
    */
   public Item(String aDescription, int aPartNumber)//構造器
   {
      description = aDescription;
      partNumber = aPartNumber;
   }

   /**
    * Gets the description of this item.
    * 
    * @return the description
    */
   public String getDescription()
   {
      return description;
   }

   public String toString()
   {
      return "[description=" + description + ", partNumber=" + partNumber + "]";
   }

   public boolean equals(Object otherObject)
   {
      if (this == otherObject) return true;
      if (otherObject == null) return false;
      if (getClass() != otherObject.getClass()) return false;
      Item other = (Item) otherObject;
      return Objects.equals(description, other.description) && partNumber == other.partNumber;
   }

   public int hashCode()
   {
      return Objects.hash(description, partNumber);
   }

   public int compareTo(Item other)//排序
   {
      int diff = Integer.compare(partNumber, other.partNumber);
      return diff != 0 ? diff : description.compareTo(other.description);
   }
}

程式執行結果如下:

9—4:

import java.util.*;

/**
 * This program sorts a set of item by comparing their descriptions.
 * @version 1.12 2015-06-21
 * @author Cay Horstmann
 */
public class TreeSetTest
{
   public static void main(String[] args)
   {
      SortedSet<Item> parts = new TreeSet<>();
      parts.add(new Item("Toaster", 1234));
      parts.add(new Item("Widget", 4562));
      parts.add(new Item("Modem", 9912));
      System.out.println(parts);

      NavigableSet<Item> sortByDescription = new TreeSet<>(
            Comparator.comparing(Item::getDescription));//把自定義類物件存入TreeSet進行排序

      sortByDescription.addAll(parts);
      System.out.println(sortByDescription);
   }
}

程式執行結果如圖:

 

測試程式4:

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

程式如下:

import java.util.*;
public class HashMapDemo //基於雜湊表的 Map介面的實現,提供所有可選的對映操作
{
   public static void main(String[] argv) {
      HashMap h = new HashMap();
      // 雜湊對映從公司名稱到地址
      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);
  }
}

程式執行結果:

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

瞭解HashMapTreeMap兩個類的用途及常用API

程式如下:

import java.util.*;

/**
 * This program demonstrates the use of a map with key type String and value type Employee.
 * @version 1.12 2015-06-21
 * @author Cay Horstmann
 */
public class MapTest//Map在有對映關係時,可以優先考慮
{
   public static void main(String[] args)
   {
      Map<String, Employee> staff = new HashMap<>();
      staff.put("144-25-5464", new Employee("Amy Lee"));
      staff.put("567-24-2546", new Employee("Harry Hacker"));
      staff.put("157-62-7935", new Employee("Gary Cooper"));
      staff.put("456-62-5527", new Employee("Francesca Cruz"));

      // 列印所有條目

      System.out.println(staff);

      // 刪除一個條目

      staff.remove("567-24-2546");

      // 替換一個條目

      staff.put("456-62-5527", new Employee("Francesca Miller"));

      // 查詢一個值

      System.out.println(staff.get("157-62-7935"));

      // 遍歷所有條目

      staff.forEach((k, v) -> 
         System.out.println("key=" + k + ", value=" + v));
   }
}

程式執行結果如下:

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

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

 

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

 

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

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

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

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

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

確定本次實驗結對程式設計合作伙伴:王海珍

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

import java.io.BufferedReader;
        import java.io.File;
        import java.io.FileInputStream;
        import java.io.FileNotFoundException;
        import java.io.IOException;
        import java.io.InputStreamReader;
        import java.util.ArrayList;
        import java.util.Arrays;
        import java.util.Collections;
        import java.util.Scanner;


public class Test{

      private static ArrayList<Person> Personlist1;
       public static void main(String[] args) {
         
          Personlist1 = new ArrayList<>();
         
          Scanner scanner = new Scanner(System.in);
          File file = new File("C:\\Users\\lenovo\\Documents\\身份證");
   
                try {
                     FileInputStream F = new FileInputStream(file);
                     BufferedReader in = new BufferedReader(new InputStreamReader(F));
                     String temp = null;
                     while ((temp = in.readLine()) != null) {
                        
                        Scanner linescanner = new Scanner(temp);
                        
                        linescanner.useDelimiter(" ");    
                        String name = linescanner.next();
                        String id = linescanner.next();
                        String sex = linescanner.next();
                        String age = linescanner.next();
                        String place =linescanner.nextLine();
                        Person Person = new Person();
                        Person.setname(name);
                        Person.setid(id);
                        Person.setsex(sex);
                        int a = Integer.parseInt(age);
                        Person.setage(a);
                        Person.setbirthplace(place);
                        Personlist1.add(Person);

                    }
                } catch (FileNotFoundException e) {
                    System.out.println("查詢不到資訊");
                    e.printStackTrace();
                } catch (IOException e) {
                    System.out.println("資訊讀取有誤");
                    e.printStackTrace();
                }
                boolean isTrue = true;
                while (isTrue) {
                    System.out.println("1:按姓名字典序輸出人員資訊;");
                    System.out.println("2:查詢最大年齡與最小年齡人員資訊;");
                    System.out.println("3.輸入你的年齡,查詢身份證號.txt中年齡與你最近人的姓名、身份證號、年齡、性別和出生地");
                    System.out.println("4:按省份找你的同鄉;");
                    System.out.println("5:退出");
                    int type = scanner.nextInt();
                    switch (type) {
                    case 1:
                        Collections.sort(Personlist1);
                        System.out.println(Personlist1.toString());
                        break;
                    case 2:
                        
                        int max=0,min=100;int j,k1 = 0,k2=0;
                        for(int i=1;i<Personlist1.size();i++)
                        {
                            j=Personlist1.get(i).getage();
                           if(j>max)
                           {
                               max=j; 
                               k1=i;
                           }
                           if(j<min)
                           {
                               min=j; 
                               k2=i;
                           }

                        }  
                        System.out.println("年齡最大:"+Personlist1.get(k1));
                        System.out.println("年齡最小:"+Personlist1.get(k2));
                        break;
                    case 3:
                        System.out.println("place?");
                        String find = scanner.next();        
                        String place=find.substring(0,3);
                        String place2=find.substring(0,3);
                        for (int i = 0; i <Personlist1.size(); i++) 
                        {
                            if(Personlist1.get(i).getbirthplace().substring(1,4).equals(place)) 
                            {
                                System.out.println("你的同鄉:"+Personlist1.get(i));
                            }
                        } 

                        break;
                    case 4:
                        System.out.println("年齡:");
                        int yourage = scanner.nextInt();
                        int close=ageclose(yourage);
                        int d_value=yourage-Personlist1.get(close).getage();
                        System.out.println(""+Personlist1.get(close));
                  
                        break;
                    case 5:
                   isTrue = false;
                   System.out.println("再見!");
                        break;
                    default:
                        System.out.println("輸入有誤");
                    }
                }
            }
            public static int ageclose(int age) {
                   int m=0;
                int    max=53;
                int d_value=0;
                int k=0;
                for (int i = 0; i < Personlist1.size(); i++)
                {
                    d_value=Personlist1.get(i).getage()-age;
                    if(d_value<0) d_value=-d_value; 
                    if (d_value<max) 
                    {
                       max=d_value;
                       k=i;
                    }

                 }    return k;
                
             }
}
public class Person implements Comparable<Person> {
            private String name;
            private String id;
            private int age;
            private String sex;
            private String birthplace;

    public String getname() {
        return name;
        }
    public void setname(String name) {
        this.name = name;
    }
    public String getid() {
        return id;
    }
    public void setid(String id) {
        this.id= id;
    }
    public int getage() {
    
        return age;
    }
    public void setage(int age) {
        // int a = Integer.parseInt(age);
        this.age= age;
    }
    public String getsex() {
        return sex;
    }
    public void setsex(String sex) {
        this.sex= sex;
    }
    public String getbirthplace() {
        return birthplace;
    }
    public void setbirthplace(String birthplace) {
        this.birthplace= birthplace;
}

    public int compareTo(Person o) {
        return this.name.compareTo(o.getname());

}

    public String toString() {
        return  name+"\t"+sex+"\t"+age+"\t"+id+"\t";

}
}

 

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

package Demo;

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Random;
import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        Number counter = new Number();
        PrintWriter out = null;
        try {
            out = new PrintWriter("test.txt");
        } catch (FileNotFoundException e) {
            System.out.println("Error!");
            e.printStackTrace();
        }

        int sum = 0;
      

        for (int i = 1; i <= 10; i++) {
            int a = (int) Math.round(Math.random() * 100);
            int b = (int) Math.round(Math.random() * 100);
            int m;
            Random rand = new Random();
            m = (int) rand.nextInt(4) + 1;


            switch (m) {
            case 1:
                a = b + (int) Math.round(Math.random() * 100);
                while(b == 0){
                    b = (int) Math.round(Math.random() * 100);
                }
                while(a % b != 0){
                    a = (int) Math.round(Math.random() * 100);
                    
                }
                //a大於b,a%b為0(保證能整除)
                System.out.println(i + ": " + a + "/" + b + "=");

                int c0 = in.nextInt();
                out.println(a + "/" + b + "=" + c0);
                if (c0 == counter.division(a, b)) {
                    sum += 10;
                    System.out.println("恭喜答案正確!");
                } else {
                    System.out.println("抱歉答案錯誤!");
                }

                break;

            case 2:
                System.out.println(i + ": " + a + "*" + b + "=");
                int c = in.nextInt();
                out.println(a + "*" + b + "=" + c);
                if (c == counter.multiplication(a, b)) {
                    sum += 10;
                    System.out.println("恭喜答案正確!");
                } else {
                    System.out.println("抱歉答案錯誤!");
                }
                break;
            case 3:
                System.out.println(i + ": " + a + "+" + b + "=");
                int c1 = in.nextInt();
                out.println(a + "+" + b + "=" + c1);
                if (c1 == counter.add(a, b)) {
                    sum += 10;
                    System.out.println("恭喜答案正確!");
                } else {
                    System.out.println("抱歉答案錯誤!");
                }
                break;
            case 4:
                while (a < b) {
                    b = (int) Math.round(Math.random() * 100);
                }
                 //若a<b,則重新生成b(避免出現負數)
                System.out.println(i + ": " + a + "-" + b + "=");
                int c2 = in.nextInt();
                out.println(a + "-" + b + "=" + c2);
                if (c2 == counter.reduce(a, b)) {
                    sum += 10;
                    System.out.println("恭喜答案正確!");
                } else {
                    System.out.println("抱歉答案錯誤!");
                }
                break;
            }
        }
        System.out.println("成績" + sum);
        out.println("成績:" + sum);
        out.close();
    }
}
package Demo;

public class Number<T> {
    private T a;
    private T b;

    public Number() {
        a = null;
        b = null;
    }
    public Number(T a, T b) {
        this.a = a;
        this.b = b;
    }
          
    public int add(int a,int b) {
        return a + b;
    }

    public int reduce(int a, int b) {
        return a - b;
    }

    public int multiplication(int a, int b) {
        return a * b;
    }

    public int division(int a, int b) {
        if (b != 0 && a%b==0)
            return a / b;
        else
            return 0;
    }
}

在執行對方的程式時,大部分程式碼差不多,但在她的程式中有部分程式碼比我的要簡潔,值得我在以後的實驗中學習。

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

package xinxi;



public class Student implements Comparable<Student> {

    private String name;
    private String number ;
    private String sex ;
    private int age;
    private String province;
   
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getnumber() {
        return number;
    }
    public void setnumber(String number) {
        this.number = number;
    }
    public String getsex() {
        return sex ;
    }
    public void setsex(String sex ) {
        this.sex =sex ;
    }
    public int getage() {

        return age;
        }
    public void setage(int age) {
        this.age= age;
        }

    public String getprovince() {
        return province;
    }
    public void setprovince(String province) {
        this.province=province ;
    }

    public int compareTo(Student o) {
       return this.name.compareTo(o.getName());
    }

    public String toString() {
        return  name+"\t"+sex+"\t"+age+"\t"+number+"\t"+province+"\n";
    }    
}
package xinxi;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

public class xinxi{
    private static ArrayList<Student> studentlist;
    public static void main(String[] args) {
        studentlist = new ArrayList<>();
        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        File file = new File("F:\\身份證號.txt");
        try {
            FileInputStream fis = new FileInputStream(file);
            @SuppressWarnings("resource")
            BufferedReader in = new BufferedReader(new InputStreamReader(fis));
            String temp = null;
            while ((temp = in.readLine()) != null) {
                
                @SuppressWarnings("resource")
                Scanner linescanner = new Scanner(temp);
                
                linescanner.useDelimiter(" ");    
                String name = linescanner.next();
                String number = linescanner.next();
                String sex = linescanner.next();
                String age = linescanner.next();
                String province =linescanner.nextLine();
                Student student = new Student();
                student.setName(name);
                student.setnumber(number);
                student.setsex(sex);
                int a = Integer.parseInt(age);
                student.setage(a);
                student.setprovince(province);
                studentlist.add(student);

            }
        } catch (FileNotFoundException e) {
            System.out.println("學生資訊檔案找不到");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("學生資訊檔案讀取錯誤");
            e.printStackTrace();
        }
        boolean isTrue = true;
        while (isTrue) {
            System.out.println("輸入序號進行相應的操作");
            System.out.println("1.字典排序");
            System.out.println("2.輸出年齡最大和年齡最小的人");
            System.out.println("3.查詢與你年齡相近的人");
            System.out.println("4.查詢你的同鄉");
            String n = scanner.next();
            switch (n) {
            case "1":
                Collections.sort(studentlist);              
                System.out.println(studentlist.toString());
                break;
            case "2":
                 int max=0,min=100;
                 int j,k1 = 0,k2=0;
                 for(int i=1;i<studentlist.size();i++)
                 {
                     j=studentlist.get(i).getage();
                 if(j>max)
                 {
                     max=j; 
                     k1=i;
                 }
                 if(j<min)
                 {
                   min=j; 
                   k2=i;
                 }
                 
                 }  
                 System.out.println("年齡最大:"+studentlist.get(k1));
                 System.out.println("年齡最小:"+studentlist.get(k2));
                break;
            case "3":
                System.out.println("年齡:");
                int yourage = scanner.nextInt();
                int near=agenear(yourage);
                @SuppressWarnings("unused") int value=yourage-studentlist.get(near).getage();
                System.out.println("和你年齡相近的是"+studentlist.get(near));
                break;

            case "4":
                 System.out.println("輸入你的家鄉");
                 String find = scanner.next();        
                 String place=find.substring(0,3);
                 for (int i = 0; i <studentlist.size(); i++) 
                 {
                     if(studentlist.get(i).getprovince().substring(1,4).equals(place)) 
                         System.out.println("你的同鄉是  "+studentlist.get(i));
                 }             
                 break;

            }
        }
    }
        public static int agenear(int age) {      
        @SuppressWarnings("unused")
        int j=0,min=53,value=0,k=0;
         for (int i = 0; i < studentlist.size(); i++)
         {
             value=studentlist.get(i).getage()-age;
             if(value<0) value=-value; 
             if (value<min) 
             {
                min=value;
                k=i;
             } 
          }    
         return k;         
      

}


}

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

package jisuan;

import java.io.*;
import java.io.PrintWriter;
import java.util.Scanner;

public class Jisuan {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        PrintWriter output = null;
        try {
            output = new PrintWriter("text.txt");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        int sum = 0;
        for (int i = 1; i <= 10; i++) {
            int a = (int) Math.round(Math.random() * 100);
            int b = (int) Math.round(Math.random() * 100);
            int m = (int) Math.round(Math.random() * 4);
            switch (m) {
            case 1:
                while (b == 0) {
                    b = (int) Math.round(Math.random() * 100);
                }
                while (a % b != 0) {
                    a = (int) Math.round(Math.random() * 100);
                }
                System.out.println(a + "/" + b + "=");
                int c1 = in.nextInt();
                output.println(a + "/" + b + "=" + c1);
                if (c1 == a / b) {
                    System.out.println("恭喜答案正確");
                    sum += 10;
                } else {
                    System.out.println("抱歉,答案錯誤");
                }

                break;

            case 2:
                System.out.println( a + "*" + b + "=");
                int c2 = in.nextInt();
                output.println(a + "*" + b + "=" + c2);
                if (c2 == a * b) {
                    System.out.println("恭喜答案正確");
                    sum += 10;
                } else {
                    System.out.println("抱歉,答案錯誤");
                }
                break;
            case 3:
                System.out.println( a + "+" + b + "=");
                int c3 = in.nextInt();
                output.println(a + "+" + b + "=" + c3);
                if (c3 == a + b) {
                    System.out.println("恭喜答案正確");
                    sum += 10;
                } else {
                    System.out.println("抱歉,答案錯誤");
                }

                break;
            case 4:
                while (a < b) {
                    a = (int) Math.round(Math.random() * 100);
                }
                System.out.println( a + "-" + b + "=");
                int c4 = in.nextInt();
                output.println(a + "-" + b + "=" + c4);
                if (c4 == a - b) {
                    System.out.println("恭喜答案正確");
                    sum += 10;
                } else {
                    System.out.println("抱歉,答案錯誤");
                }
                break;

            }

        }
        System.out.println("成績" + sum);
        output.println("成績" + sum);
        output.close();
    }
}
package jisuan;
public class math<T> {
    private T a;
    private T b;

    public int add(int a, int b) {
        return a + b;
    }

    public int reduce(int a, int b) {
        return a - b;
    }

    public int multiplication(int a, int b) {
        return a * b;
    }

    public int division(int a, int b) {
        if (b != 0 && a % b == 0)
            return a / b;
        else
            return 0;
    }
}

實驗總結:

通過本週學習,我進一步複習了一些有關資料結構的知識,另外初步瞭解了java集合類,也瞭解了Vector類,Stack類以及Hashtable類。除此以外,此次實驗第一次採用結對程式設計的方法,通過和合作夥伴互相執行程式,相互討論交流,從中學到了很多東西。希望以後多采取這種方法,在合作中互相學習進步。