王之泰/王志成《面向对象程序设计(java)》第十一周学习总结
第一部分:理论知识学习部分
第十一章理论知识主要为集合类的介绍,在实验中都有所体现且本周主要复习回顾上周的泛型程序设计
第二部分:实验部分 ——集合
1、实验目的与要求
(1) 掌握Vetor、Stack、Hashtable三个类的用途及常用API;
(2) 了解java集合框架体系组成;
(3) 掌握ArrayList、LinkList两个类的用途及常用API。
(4) 了解HashSet类、TreeSet类的用途及常用API。
(5)了解HashMap、TreeMap两个类的用途及常用API;
(6) 结对编程(Pair programming)练习,体验程序开发中的两人合作。
2、实验内容和步骤
实验1: 导入第9章示例程序,测试程序并进行代码注释。
测试程序1:
1.使用JDK命令运行编辑、运行以下三个示例程序,结合运行结果理解程序;
2.掌握Vetor、Stack、Hashtable三个类的用途及常用API。
//示例程序1
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();
}
}
结果如下:
处理后:
package shi_li; 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();
}
else {
((Dog) 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);
}
}
测试程序2:
1.使用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");
}
}
2.在Elipse环境下编辑运行调试教材360页程序9-1,结合程序运行结果理解程序;
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); // 批量操作:从A中删除B中的所有单词 a.removeAll(b); System.out.println(a);
}
}
3.掌握ArrayList、LinkList两个类的用途及常用API。
测试程序3:
1.运行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());
}
}
}
2.在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<>(); // SETHASSET实现
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.");
}
}
3.在Elipse环境下调试教材367页-368程序9-3、9-4,结合程序运行结果理解程序;了解TreeSet类的用途及常用API。
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);
}
}
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);
}
}
测试程序4:
1.使用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);
}
}
2.在Elipse环境下调试教材373页程序9-6,结合程序运行结果理解程序;
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 + "]";
}
}
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")); // print all entries System.out.println(staff); // remove an entry staff.remove("567-24-2546"); // replace an entry staff.put("456-62-5527", new Employee("Francesca Miller")); // look up a value System.out.println(staff.get("157-62-7935")); // iterate through all entries staff.forEach((k, v) ->
System.out.println("key=" + k + ", value=" + v));
}
}
3.了解HashMap、TreeMap两个类的用途及常用API。
实验2:结对编程练习:
1.关于结对编程:以下图片是一个结对编程场景:两位学习伙伴坐在一起,面对着同一台显示器,使用着同一键盘,同一个鼠标,他们一起思考问题,一起分析问题,一起编写程序。
2.关于结对编程的阐述可参见以下链接:
http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html
http://en.wikipedia.org/wiki/Pair_programming
3.对于结对编程中代码设计规范的要求参考:
http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html
以下实验,就让我们来体验一下结对编程的魅力。
1.确定本次实验结对编程合作伙伴;
我的小伙伴为:王志成
2.各自运行合作伙伴实验九编程练习1,结合使用体验对所运行程序提出完善建议;
3.各自运行合作伙伴实验十编程练习2,结合使用体验对所运行程序提出完善建议;
程序互测概述:
我和小伙伴互相测试了对方的实验九编程练习1程序,小伙伴的程序基本要求都能达到,就是在文件的读取上面还有些欠缺,但是在后面的共同学习中他很好的改了过来。实验十编程练习2中基本功能要求也同样能实现,只是在除法上面有点缺陷没有很好地实现实数运算。
程序互测心得:
通过本次和小伙伴的程序互测体验,其好处在于帮助别人发现问题的同时还可反思自己的程序,认识自己的不足。而且很有效的提升了自己阅读代码的能力。
4.采用结对编程方式,与学习伙伴合作完成实验九编程练习1;
结对编程代码;
package jiedui_bianchen; 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) //throws IOException
{
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("\t");
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("输入有误");
}
}
} }
结对程序运行功能界面截图;
结对过程描述,提供两人在讨论、细化和编程时的结对照片(非摆拍)。
5.采用结对编程方式,与学习伙伴合作完成实验十编程练习2。
结对编程代码;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.Scanner; public class ss {
public static void main(String[] args) { Scanner in = new Scanner(System.in);
Calculator<Integer> sf = new Calculator<Integer>();
File file = new File("wzt.txt");
if(file.exists()) {
System.out.println("文件已存在");
}
PrintWriter output = null;
try {
output = new PrintWriter(new FileOutputStream(file));
} catch (Exception e) {
//e.printStackTrace();
}
int sum = 0; System.out.println("计算结果保留两位小数");
for (int i = 1; i < 11; i++) {
int a = (int) Math.round(Math.random() * 100);
int b = (int) Math.round(Math.random() * 100);
int s = (int) Math.round(Math.random() * 3); switch(s)
{
case 1:
System.out.println(i+": "+a+"/"+b+"=");
Number c = in.nextDouble();
output.println(a+"/"+b+"="+c);
Number g = sf.division(a, b);
BigDecimal division = new BigDecimal(g.doubleValue());
g = division.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
if (c.equals(g)) {
sum += 10;
System.out.println("恭喜答案正确");
}
else {
System.out.println("抱歉,答案错误");
} break; case 2:
System.out.println(i+": "+a+"*"+b+"=");
Number c1 = in.nextDouble();
output.println(a+"*"+b+"="+c1);
Number g1 = sf.mulitiplication(a, b);
BigDecimal mul = new BigDecimal(g1.doubleValue());
g1 = mul.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
if (c1.equals(g1) ){
sum += 10;
System.out.println("恭喜答案正确");
}
else {
System.out.println("抱歉,答案错误");
}
break;
case 3:
System.out.println(i+": "+a+"+"+b+"=");
Number c2 = in.nextDouble();
output.println(a+"+"+b+"="+c2);
Number g2 =sf.addition(a, b);
BigDecimal add = new BigDecimal(g2.doubleValue());
g2 = add.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
if (c2.equals(g2)) {
sum += 10;
System.out.println("恭喜答案正确");
}
else {
System.out.println("抱歉,答案错误");
} break ;
case 4:
System.out.println(i+": "+a+"-"+b+"=");
Number c3 = in.nextDouble();
output.println(a+"-"+b+"="+c3);
Number g3 = sf.subtraction(a, b);
BigDecimal sub = new BigDecimal(g3.doubleValue());
g3 = sub.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
if (c3.equals(g3)) {
sum += 10;
System.out.println("恭喜答案正确");
}
else {
System.out.println("抱歉,答案错误");
}
break ; } }
System.out.println("成绩"+sum);
output.println("成绩:"+sum);
output.close();
in.close(); }
}
结对程序运行功能界面截图;
结对过程描述,提供两人在讨论、细化和编程时的结对照片(非摆拍)。
第三部分:总结
在本周的学习过程中,复习了上周内容即泛型程序设计的知识,学习了新的关于集合类的知识,理解了一些常用API的用途。在实验方面通过结对编程,在小伙伴的帮助下认识了自己的不足,提升了自己的阅读代码的能力。
王之泰/王志成《面向对象程序设计(java)》第十一周学习总结的更多相关文章
- 201771010134杨其菊《面向对象程序设计java》第九周学习总结
第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...
- 201871010132-张潇潇《面向对象程序设计(java)》第一周学习总结
面向对象程序设计(Java) 博文正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cn ...
- 扎西平措 201571030332《面向对象程序设计 Java 》第一周学习总结
<面向对象程序设计(java)>第一周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 ...
- 201871010124 王生涛《面向对象程序设计JAVA》第一周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://edu.cnblogs.com/campus/xbsf/ ...
- 杨其菊201771010134《面向对象程序设计Java》第二周学习总结
第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...
- 201871010115——马北《面向对象程序设计JAVA》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 201871010132——张潇潇《面向对象程序设计JAVA》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 201771010123汪慧和《面向对象程序设计Java》第二周学习总结
一.理论知识部分 1.标识符由字母.下划线.美元符号和数字组成, 且第一个符号不能为数字.标识符可用作: 类名.变量名.方法名.数组名.文件名等.第二部分:理论知识学习部分 2.关键字就是Java语言 ...
- 王之泰201771010131《面向对象程序设计(java)》第七周学习总结
王之泰201771010131<面向对象程序设计(java)>第七周学习总结 第一部分:理论知识学习部分 第五章 第五章内容深度学习: 继承:如果两个类存在继承关系,则子类会自动继承父类的 ...
随机推荐
- C++ 第二次实验
实验内容: 1.函数重载编程练习 编写重载函数add(),实现对int型,double型,Complex型数据的加法.在main()函数中定义不同类型 数据,调用测试. #include <io ...
- 你应当如何学习C++以及编程(细节是必要的,但不是重要的,把时间用在集中精力去解决问题,而不是学习新技术,那样练不成高手。在实践中提高才是最重要的。最最重要的内功还是长期学习所磨练出来的自学能力)good
最近在学习Qt但由于没有C++的基础,感觉学的很吃力.看到pongba的这篇文章感觉不错就弄过来了, 原文地址:http://blog.csdn.net/qter_wd007/article/deta ...
- 2017年年度总结 & 2018年计划
2017年年度总结 & 2018年计划 2017关键词 「入门」 从2017年4月,入坑软件测试行业,感谢这10个月,给予我开发.测试帮助的前辈们. 这10个月以来, 1,前后花了一个 ...
- AngularJS简单例子
双大括号标记{{}}绑定的表达式 <html ng-app> <script src="http://code.angularjs.org/angular-1.0.1.mi ...
- input实现上传
很多时候我们会用到上传,实现一个普通的上传也很简单,不用引用繁琐的插件 一个普通的上传 <form action="=upload" method="post&qu ...
- js获取 gif 的帧数
使用 javascript 获取 GIF 图的帧数,如果帧数过大,则不让传到服务器 这里是使用一个插件: github地址为: https://github.com/buzzfeed/libgif-j ...
- IdeaJ 常见插件安装, 常用配置,常用快捷键
-- 系统是 Ubuntu 16.04 1, 插件: 2, 常见的设置: [1] 代码提示的修改: File --> settings --> Keymap --> MainMenu ...
- windows10上安装mysql(详细步骤)
2016年09月06日 08:09:34 阅读数:46198 环境:windwos 10(1511) 64bit.mysql 5.7.14 时间:2016年9月5日 一.下载mysql 1. 在浏览器 ...
- redis----------基本命令使用
1.查看全部缓存数据的key keys * 2.清空当前redis数据库缓存 flushdb (redis默认由16个库(0~15号). 且默认使用的是0号库.库之间的切换使用select命令例如: ...
- Linux 7.x 防火墙&端口
Linux 7.x 防火墙&端口 查看当前防火墙的状态: # firewall-cmd --state 也可以使用指令:systemctl status firewall.service 启动 ...