zoukankan      html  css  js  c++  java
  • 201771010123汪慧和《面向对象程序设计Java》第十一周实验总结

    一、理论部分

    1、栈

    (1)栈是一种特殊的线性表,是一种后进先出的结构。
    (2)栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶,表头称为栈底。
    (3)栈的物理存储可以用顺序存储结构,也可以用链式存储结构。
    2、队列
    (1)队列是限定所有的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表。

    (2)表中允许插入的一端称为队尾,允许删除的一端称为队头。

    (3)队列的操作是按先进先出的原则进行的。

    (4)队列的物理存储可以用顺序存储结构,也可以用链式存储结构。

    3、散列表又称为哈希表。散列表算法的基本思想是:以结点的关键字为变量,通过一定的函数关系计算出对应的函数值,以这个值作为该结点存储在散列表中的地址。

    4、JAVA的集合框架实现对各种数据结构的封装,以降低对数据管理与处理的难度。

    5、所谓框架就是一个类库的集合,框架中包含很多超类,编程者创建这些超类的子类可较方便的设计设计程序所需的类。例如:Swing类包
    6、Java的集合类包含在java.util包中。

    7、集合类的特点
    (1)只容纳对象。

    (2)集合类容纳的对象都是Object类的实例,一旦把一个对象置入集合类中,它的类信息将丢失,这样设计的目的是为了集合类的通用性。

    8、Vector类

    (1)Vector类类似长度可变的数组。
    (2)Vector中只能存放对象。
    (3)Vector的元素通过下标进行访问。
    (4) Vector类关键属性:a.capacity表示集合最多能容纳的元素个数。b.capacityIncrement表示每次增加多少容量。c.size表示集合当前元素个数。
    9、Stack类是Vector的子类。
    10、Hashtable通过键来查找元素。Hashtable用散列码(hashcode)来确定键。所有对象都有一个散列码,可以通过Object类的hashCode()方法获得。
    11、集合框架中的基本接口

    二、实验部分

    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更改后的代码如下:

    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) { //instanceof判断类型是否匹配
                ((Cat) cats.elementAt(i)).print();
        }
                else {
                    ((Dog) cats.elementAt(i)).print();
                }
     }
    }

    示例程序1的实验结果如下图所示:

     更改后的实验结果如下图所示:

     示例程序2的实验结果如下图所示:

    示例程序3的实验结果如下图所示:

    测试程序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");

       }

    }

    import java.util.*;
    
    public class ArrayListDemo {
        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"));//字符串类对象,说明集合中的元素的类型可以不同
            // 首先使用for循环将它们打印出来。
            System.out.println("Retrieving by index:");
            for (int i = 0; i < al.size(); i++) {
                System.out.println("Element " + i + " = " + al.get(i));
            }
        }
    }

    实验结果如下图所示:

     

    l 在Elipse环境下编辑运行调试教材360页程序9-1,结合程序运行结果理解程序;

    l 掌握ArrayList、LinkList两个类的用途及常用API。

    package linkedList;
    
    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)
       {
          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");
    
          // 把单词从b合并到a
    
          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);
    
          // 从b中删除每一个单词
          bIter = b.iterator();
          while (bIter.hasNext())
          {
             bIter.next(); // 跳过一个元素
             if (bIter.hasNext())
             {
                bIter.next(); // 跳过下一个元素
                bIter.remove(); // 删除该元素
             }
          }
    
          System.out.println(b);
    
          // 批量操作:将b中的所有单词从a中删除
    
          a.removeAll(b);
    
          System.out.println(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());

            }

        }

    }

    实验结果如下图所示:

    l 在Elipse环境下调试教材365页程序9-2,结合运行结果理解程序;了解HashSet类的用途及常用API。

    package set;
    
    import java.util.*;
    
    /**
     * This program uses a set to print all unique words in System.in.
     * @version 1.12 2015-06-21
     * @author Cay Horstmann
     */
    public class SetTest
    {
       public static void main(String[] args)
       {
          Set<String> words = new HashSet<>(); //HashSet实现集
          long totalTime = 0;
    
          try (Scanner in = new Scanner(System.in))
          {
             while (in.hasNext())
             {
                String word = in.next();
                long callTime = System.currentTimeMillis();
                words.add(word);
                callTime = System.currentTimeMillis() - callTime;
                totalTime += callTime;
             }
          }
    
          Iterator<String> iter = words.iterator();
          for (int i = 1; i <= 20 && iter.hasNext(); i++)
             System.out.println(iter.next());
          System.out.println(". . .");
          System.out.println(words.size() + " distinct words. " + totalTime + " milliseconds.");
       }
    }

    l 在Elipse环境下调试教材367页-368程序9-3、9-4,结合程序运行结果理解程序;了解TreeSet类的用途及常用API。

    package treeSet;
    
    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));
    
          sortByDescription.addAll(parts);
          System.out.println(sortByDescription);
       }
    }
    package treeSet;
    
    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);
       }
    }

    实验结果如下图所示:

    测试程序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);

      }

    }

    import java.util.*;
    
    public class HashMapDemo {
    
       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);
    
      }
    
    }

    实验结果如下图所示:

    l 在Elipse环境下调试教材373页程序9-6,结合程序运行结果理解程序;

    l 了解HashMap、TreeMap两个类的用途及常用API。

    package map;
    
    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
    {
       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));
       }
    }
    package map;
    
    /**
     * A minimalist employee class for testing purposes.
     */
    public class Employee
    {
       private String name;
       private double salary;
    
       /**
        * Constructs an employee with $0 salary.
        * @param n the employee name
        */
       public Employee(String name)
       {
          this.name = name;
          salary = 0;
       }
    
       public String toString()
       {
          return "[name=" + name + ", salary=" + salary + "]";
       }
    }

    实验结果如下图所示:

    实验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:

    package IDcard;
    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.Scanner;
    import java.util.Collections;
    
    public class ID {
    
        public static People findPeopleByname(String name) {
            People flag = null;
            for (People people : peoplelist) {
                if(people.getName().equals(name)) {
                    flag = people;
                }
            }
            return flag;
    
        }
    
        public static People findPeopleByid(String id) {
            People flag = null;
            for (People people : peoplelist) {
                if(people.getnumber().equals(id)) {
                    flag = people;
                }
            }
            return flag;
    
        }
         
        private static ArrayList<People> agenear(int yourage) {
            // TODO Auto-generated method stub
            int j=0,min=53,d_value=0,k = 0;
            ArrayList<People> plist = new ArrayList<People>();
            for (int i = 0; i < peoplelist.size(); i++) {
                d_value = peoplelist.get(i).getage() > yourage ? 
                        peoplelist.get(i).getage() - yourage : yourage - peoplelist.get(i).getage() ;
                k = d_value < min ? i : k;
                min = d_value < min ? d_value : min;
            }
            for(People people : peoplelist) {
                if(people.getage() == peoplelist.get(k).getage()) {
                    plist.add(people);
                }
            }
            return plist;
        }
    
        private static ArrayList<People> peoplelist; 
        
        public static void main(String[] args) {
            peoplelist = new ArrayList<People>();
            Scanner scanner = new Scanner(System.in);
            File file = new File("D:\身份证号.txt");
            try {
                FileInputStream files = new FileInputStream(file);
                BufferedReader in = new BufferedReader(new InputStreamReader(files));
                String temp = null;
                while ((temp = in.readLine()) != null) {
                    
                    String[] information = temp.split("[ ]+");
                    People people = new People();
                    people.setName(information[0]);
                    people.setnumber(information[1]);
                    int A = Integer.parseInt(information[3]);
                    people.setage(A);
                    people.setsex(information[2]);
                    for(int j = 4; j<information.length;j++) {
                        people.setplace(information[j]);
                    }
                    peoplelist.add(people);
    
                }
            } 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.输入你的年龄,查询身份证号.txt中年龄与你最近的人");
                System.out.println("   5.查询人员中是否有你的同乡");
                System.out.println("   6.退出");
                System.out.println("******************************************");
                int nextInt = scanner.nextInt();
                switch (nextInt) {
                case 1:
                    Collections.sort(peoplelist);
                    System.out.println(peoplelist.toString());
                    break;
                case 2:
                    int max=0;
                    int j,k1 = 0;
                    for(int i=1;i<peoplelist.size();i++)
                    {
                        j = peoplelist.get(i).getage();
                       if(j>max)
                       {
                           max = j; 
                           k1 = i;
                       }
                      
                    }  
                    System.out.println("年龄最大:"+peoplelist.get(k1));
                    break;
                case 3:
                    int min = 100;
                    int j1,k2 = 0;
                    for(int i=1;i<peoplelist.size();i++)
                    {
                        j1 = peoplelist.get(i).getage();
                        if(j1<min)
                        {
                            min = j1; 
                            k2 = i;
                        }
    
                     } 
                    System.out.println("年龄最小:"+peoplelist.get(k2));
                    break;
                case 4:
                    System.out.println("年龄:");
                    int input_age = scanner.nextInt();
                    ArrayList<People> plist = new ArrayList<People>();
                    plist = agenear(input_age);
                    for(People people : plist) {
                        System.out.println(people.toString());
                    }
                    break;
                case 5:
                    System.out.println("请输入省份");
                    String find = scanner.next();        
                    for (int i = 0; i <peoplelist.size(); i++) 
                    {
                        String [] place = peoplelist.get(i).getplace().split("	");
                        for(String temp : place) {
                            if(find.equals(temp)) {
                                System.out.println("你的同乡是    "+peoplelist.get(i));
                                break;
                            }
                        }
                        
                    } 
                    break;
                case 6:
                    isTrue = false;
                    System.out.println("byebye!");
                    break;
                default:
                    System.out.println("输入有误");
                }
            }
        }
    
    }
    package IDcard;
    
    public class People implements Comparable<People> {
    
        private    String name = null;
        private    String number = null;
        private    int age = 0;
        private    String sex = null;
        private    String place = null;
    
        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 int getage() 
        {
            return age;
        }
        public void setage(int age ) 
        {
            this.age = age;
        }
        public String getsex() 
        {
            return sex;
        }
        public void setsex(String sex ) 
        {
            this.sex = sex;
        }
        public String getplace() 
        {
            return place;
        }
        public void setplace(String place) 
        {
            if(this.place == null) {
                this.place = place;
            }else {
                this.place = this.place+ "	" +place;
            }
    
        }
        public int compareTo(People o)
        {
            return this.name.compareTo(o.getName());
        }
        public String toString() 
        {
            return  name+"	"+sex+"	"+age+"	"+number+"	"+place+"
    ";
        }
    }

    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.Scanner;
    import java.util.Collections;//对集合进行排序、查找、修改等;
     
    public class Test {
        private static ArrayList<Citizen> citizenlist;
     
        public static void main(String[] args) {
            citizenlist = new ArrayList<>();
            Scanner scanner = new Scanner(System.in);
            File file = new File("E:/java/身份证号.txt");
            //异常捕获
            try {
                FileInputStream fis = new FileInputStream(file);
                BufferedReader in = new BufferedReader(new InputStreamReader(fis));
                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 birthplace = linescanner.nextLine();
                    Citizen citizen = new Citizen();
                    citizen.setName(name);
                    citizen.setId(id);
                    citizen.setSex(sex);
                    // 将字符串转换成10进制数
                    int ag = Integer.parseInt(age);
                    citizen.setage(ag);
                    citizen.setBirthplace(birthplace);
                    citizenlist.add(citizen);
     
                }
            } 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.查询人员中是否查询人员中是否有你的同乡");
                System.out.println("4.输入你的年龄,查询文件中年龄与你最近人的姓名、身份证号、年龄、性别和出生地");
                System.out.println("5.退出");
                int nextInt = scanner.nextInt();
                switch (nextInt) {
                case 1:
                    Collections.sort(citizenlist);
                    System.out.println(citizenlist.toString());
                    break;
                case 2:
                    int max = 0, min = 100;
                    int m, k1 = 0, k2 = 0;
                    for (int i = 1; i < citizenlist.size(); i++) {
                        m = citizenlist.get(i).getage();
                        if (m > max) {
                            max = m;
                            k1 = i;
                        }
                        if (m < min) {
                            min = m;
                            k2 = i;
                        }
                    }
                    System.out.println("年龄最大:" + citizenlist.get(k1));
                    System.out.println("年龄最小:" + citizenlist.get(k2));
                    break;
                case 3:
                    System.out.println("出生地:");
                    String find = scanner.next();
                    String place = find.substring(0, 3);
                    for (int i = 0; i < citizenlist.size(); i++) {
                        if (citizenlist.get(i).getBirthplace().substring(1, 4).equals(place))
                            System.out.println("出生地" + citizenlist.get(i));
                    }
                    break;
                case 4:
                    System.out.println("年龄:");
                    int yourage = scanner.nextInt();
                    int near = peer(yourage);
                    int j = yourage - citizenlist.get(near).getage();
                    System.out.println("" + citizenlist.get(near));
                    break;
                case 5:
                    isTrue = false;
                    System.out.println("程序已退出!");
                    break;
                default:
                    System.out.println("输入有误");
                }
            }
        }
     
        public static int peer(int age) {
            int flag = 0;
            int min = 53, j = 0;
            for (int i = 0; i < citizenlist.size(); i++) {
                j = citizenlist.get(i).getage() - age;
                if (j < 0)
                    j = -j;
                if (j < min) {
                    min = j;
                    flag = i;
                }
            }
            return flag;
        }
    }
    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) {
                 // int a = Integer.parseInt(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+"	"+sex+"	"+age+"	"+number+"	"+province+"
    ";
       }   
     }

    分析:代码基本大同小异,实现的功能也基本相同,但小伙伴很细心,对代码进行了注释,这点值得我学习。

    实验十编程练习2:

    package 改进版;
    
    import java.io.FileNotFoundException;
    import java.io.PrintWriter;
    import java.util.Random;
    import java.util.Scanner;
    
    public class Suanshu1 {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            Suanshu ss = new Suanshu();
            PrintWriter out = null;
            try {
                out = new PrintWriter("test.txt");
            } catch (FileNotFoundException e) {
                System.out.println("文件夹输出失败");
                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;
                System.out.println("随机生成的四则运算类型:" + m);
    
                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);
                        
                    }
                    System.out.println(i + " " + a + "/" + b + "=");
    
                    int c0 = in.nextInt();
                    out.println(a + "/" + b + "=" + c0);
                    if (c0 == ss.chufa(a, b)) {
                        sum += 10;
                        System.out.println("right!");
                    } else {
                        System.out.println("error!");
                    }
    
                    break;
    
                case 2:
                    System.out.println(i + " " + a + "*" + b + "=");
                    int c = in.nextInt();
                    out.println(a + "*" + b + "=" + c);
                    if (c == ss.chengfa(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 == ss.jiafa(a, b)) {
                        sum += 10;
                        System.out.println("回答正确!");
                    } else {
                        System.out.println("回答错误!");
                    }
                    break;
                case 4:
                    while (a < b) {
                        b = (int) Math.round(Math.random() * 100);
                    }
                                   
                    System.out.println(i + " " + a + "-" + b + "=");
                    int c2 = in.nextInt();
                    out.println(a + "-" + b + "=" + c2);
                    if (c2 == ss.jianfa(a, b)) {
                        sum += 10;
                        System.out.println("回答正确!");
                    } else {
                        System.out.println("回答错误!");
                    }
                    break;
                }
            }
            System.out.println("最后得分" + sum);
            out.println("最后得分" + sum);
            out.close();
        }
    }
    package 改进版;
    
    public class Suanshu<T> {
        private T a;
        private T b;
    
        public Suanshu() {
            a = null;
            b = null;
        }
        public Suanshu(T a, T b) {
            this.a = a;
            this.b = b;
        }
              
        public int jiafa(int a,int b) {
            return a + b;
        }
    
        public int jianfa(int a, int b) {
            return a - b;
        }
    
        public int chengfa(int a, int b) {
            return a * b;
        }
    
        public int chufa(int a, int b) {
            if (b != 0 && a%b==0)
                return a / b;
            else
                return 0;
        }
    }

     

    import java.io.FileNotFoundException;
    import java.io.PrintWriter;
    import java.util.Random;
    import java.util.Scanner;
     
    public class Suanshu {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
           Suanshu ss = new Suanshu();
            PrintWriter out = null;
            try {
                out = new PrintWriter("test.txt");
            } catch (FileNotFoundException e) {
                System.out.println("文件夹输出失败");
                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;
                System.out.println("随机生成的四则运算类型:" + m);
     
                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);
                         
                    }
                    System.out.println(i + " " + a + "/" + b + "=");
     
                    int c0 = in.nextInt();
                    out.println(a + "/" + b + "=" + c0);
                    if (c0 == ss.chufa(a, b)) {
                        sum += 10;
                        System.out.println("right!");
                    } else {
                        System.out.println("error!");
                    }
     
                    break;
     
                case 2:
                    System.out.println(i + " " + a + "*" + b + "=");
                    int c = in.nextInt();
                    out.println(a + "*" + b + "=" + c);
                    if (c == ss.chengfa(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 == ss.jiafa(a, b)) {
                        sum += 10;
                        System.out.println("回答正确!");
                    } else {
                        System.out.println("回答错误!");
                    }
                    break;
                case 4:
                    while (a < b) {
                        b = (int) Math.round(Math.random() * 100);
                    }
                                    
                    System.out.println(i + " " + a + "-" + b + "=");
                    int c2 = in.nextInt();
                    out.println(a + "-" + b + "=" + c2);
                    if (c2 == ss.jiafa(a, b)) {
                        sum += 10;
                        System.out.println("回答正确!");
                    } else {
                        System.out.println("回答错误!");
                    }
                    break;
                }
            }
            System.out.println("最后得分" + sum);
            out.println("最后得分" + sum);
            out.close();
        }
     
        private int jiafa(int a, int b) {
            // TODO Auto-generated method stub
            return 0;
        }
     
        private int chengfa(int a, int b) {
            // TODO Auto-generated method stub
            return 0;
        }
     
        private int chufa(int a, int b) {
            // TODO Auto-generated method stub
            return 0;
        }
    }
        
    public class Suanshu<T> {
        private T a;
        private T b;
     
        public Suanshu() {
            a = null;
            b = null;
        }
        public Suanshu(T a, T b) {
            this.a = a;
            this.b = b;
        }
               
        public int jiafa(int a,int b) {
            return a + b;
        }
     
        public int jianfa(int a, int b) {
            return a - b;
        }
     
        public int chengfa(int a, int b) {
            return a * b;
        }
     
        public int chufa(int a, int b) {
            if (b != 0 && a%b==0)
                return a / b;
            else
                return 0;
        }
    }

    分析:代码差不多,实现的功能一致,对四则运算都进行了改进,小伙伴做得很认真,我要多多学习。

    三、实验总结

         通过本周的学习我了解了Java的集合框架,明白了JAVA的集合框架实现对各种数据结构的封装,以降低对数据管理与处理的难度。通过和小伙伴王玉兰对前两周的实验进行了改进,对程序有了进一步的理解,也让我认识到了自己的不足,在今后的学习中仍然需要努力。这种结对编程的方式很好,让我们有了交流,可以共同督促,共同进步。

  • 相关阅读:
    【HDOJ】2267 How Many People Can Survive
    【HDOJ】2268 How To Use The Car
    【HDOJ】2266 How Many Equations Can You Find
    【POJ】2278 DNA Sequence
    【ZOJ】3430 Detect the Virus
    【HDOJ】2896 病毒侵袭
    求奇数的乘积
    平方和与立方和
    求数列的和
    水仙花数
  • 原文地址:https://www.cnblogs.com/http-www-whh0601-cnblogs-com/p/9930060.html
Copyright © 2011-2022 走看看