1、实验目的与要求

(1) 理解泛型概念;

(2) 掌握泛型类的定义与使用;

(3) 掌握泛型方法的声明与使用;

(4) 掌握泛型接口的定义与实现;

(5)了解泛型程序设计,理解其用途。

2、实验内容和步骤

实验1: 导入第8章示例程序,测试程序并进行代码注释。

测试程序1:

编辑、调试、运行教材311、312页 代码,结合程序运行结果理解程序;

在泛型类定义及使用代码处添加注释;

掌握泛型类的定义及使用。

  1. package pair1;
  2.  
  3. /**
  4. * @version 1.00 2004-05-10
  5. * @author Cay Horstmann
  6. */
  7. public class Pair<T> //引入类型变量T
  8. {
  9. private T first;
  10. private T second;
  11.  
  12. public Pair() { first = null; second = null; }
  13. public Pair(T first, T second) { this.first = first; this.second = second; }
  14.  
  15. public T getFirst() { return first; }
  16. public T getSecond() { return second; }
  17.  
  18. public void setFirst(T newValue) { first = newValue; }
  19. public void setSecond(T newValue) { second = newValue; }
  20. }
  1. package pair1;
  2.  
  3. /**
  4. * @version 1.01 2012-01-26
  5. * @author Cay Horstmann
  6. */
  7. public class PairTest1
  8. {
  9. public static void main(String[] args)
  10. {
  11. String[] words = { "Mary", "had", "a", "little", "lamb" };
  12. Pair<String> mm = ArrayAlg.minmax(words);
  13. System.out.println("min = " + mm.getFirst());
  14. System.out.println("max = " + mm.getSecond());
  15. }
  16. }
  17.  
  18. class ArrayAlg//泛型方法
  19. {
  20. /**
  21. * Gets the minimum and maximum of an array of strings.
  22. * @param a an array of strings
  23. * @return a pair with the min and max value, or null if a is null or empty
  24. */
  25. public static Pair<String> minmax(String[] a)
  26. {
  27. if (a == null || a.length == 0) return null;
  28. String min = a[0];
  29. String max = a[0];
  30. for (int i = 1; i < a.length; i++)
  31. {
  32. if (min.compareTo(a[i]) > 0) min = a[i];
  33. if (max.compareTo(a[i]) < 0) max = a[i];
  34. }
  35. return new Pair<>(min, max);
  36. }
  37. }

测试程序2:

编辑、调试运行教材315 PairTest2,结合程序运行结果理解程序;

在泛型程序设计代码处添加相关注释;

掌握泛型方法、泛型变量限定的定义及用途。

测试程序3:

用调试运行教材335 PairTest3,结合程序运行结果理解程序;

了解通配符类型的定义及用途。

实验2:编程练习:

编程练习1:实验九编程题总结

l  实验九编程练习1总结(从程序总体结构说明、模块说明,目前程序设计存在的困难与问题三个方面阐述)。

1程序总体分为两个类、三个模块具体如下:

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

目前存在的问题:文件读入的地址可能出现错误,接口的定义也可能出现问题;算法的实现也可能会出问题。

l  实验九编程练习2总结(从程序总体结构说明、模块说明,目前程序设计存在的困难与问题三个方面阐述)。

1程序总体分为两个类、三个模块具体如下:

  1. package duanyan;
  2. import java.io.FileNotFoundException;
  3. import java.io.PrintWriter;
  4. import java.util.Scanner;
  5. public class z {
  6. public static void main(String[] args) {
  7.  
  8. Scanner in = new Scanner(System.in);
  9. Student student=new Student();
  10. PrintWriter out = null;
  11. try {
  12. out = new PrintWriter("text.txt");//保存文件模块
  13. } catch (FileNotFoundException e) {
  14. e.printStackTrace();
  15. }
  16. int sum = 0;
  17.  
  18. //随机生成a、b的值以及随机的运算模块
  19. for (int i = 1; i <=10; i++) {
  20. int a = (int) Math.round(Math.random() * 100);
  21. int b = (int) Math.round(Math.random() * 100);
  22. int c= (int) Math.round(Math.random() * 3);
  23.  
  24. switch(c)
  25. {
  26. case 0:
  27. System.out.println(i+": "+a+"/"+b+"=");
  28.  
  29. while(b==0)
  30. {
  31. b = (int) Math.round(Math.random() * 100);
  32. }
  33.  
  34. int C = in.nextInt();
  35. out.println(a+"/"+b+"="+C);
  36. if (C == student.d(a, b)) {
  37. sum += 10;
  38. System.out.println("恭喜答案正确");
  39. }
  40. else {
  41. System.out.println("抱歉,答案错误");
  42. }
  43.  
  44. break;
  45.  
  46. case 1:
  47. System.out.println(i+": "+a+"*"+b+"=");
  48. int D = in.nextInt();
  49. out.println(a+"*"+b+"="+D);
  50. if (D == student.m(a, b)) {
  51. sum += 10;
  52. System.out.println("恭喜答案正确");
  53. }
  54. else {
  55. System.out.println("抱歉,答案错误");
  56. }
  57. break;
  58. case 2:
  59. System.out.println(i+": "+a+"+"+b+"=");
  60. while(a<b)
  61. {
  62. a = (int) Math.round(Math.random() * 100);
  63. }
  64. int E = in.nextInt();
  65. out.println(a+"+"+b+"="+E);
  66. if (E == student.add(a, b)) {
  67. sum += 10;
  68. System.out.println("恭喜答案正确");
  69. }
  70. else { System.out.println("抱歉,答案错误");
  71. }
  72.  
  73. break ;
  74. case 3:
  75. System.out.println(i+": "+a+"-"+b+"=");
  76. int F = in.nextInt();
  77. out.println(a+"-"+b+"="+F);
  78. if (F == student.r(a, b)) {
  79. sum += 10;
  80. System.out.println("恭喜答案正确");
  81. }
  82. else {
  83. System.out.println("抱歉,答案错误");
  84. }
  85. break ;
  86. }
  87. }
  88. System.out.println("成绩"+sum);
  89. out.println("成绩:"+sum);
  90. out.close();
  91. }
  92. }
  1. package duanyan;
  2. public class Student {
  3. private int a;
  4. private int b;
  5. public int add(int a,int b)
  6. {
  7. return a+b;
  8. }
  9. public int reduce(int a,int b)
  10. {
  11. return a-b;
  12. }
  13. public int multiplication(int a,int b)
  14. {
  15. return a*b;
  16. }
  17. public int division(int a,int b)
  18. {
  19. if(b!=0)
  20. return a/b;
  21. else return 0;
  22. }
  23.  
  24. }

存在问题的:算法的实现可能出现错误,子类的定义可能出现错误,除法运算中被除数b不能等于0可能会考虑不到,减法运算中a>b可能会注意不到,

编程练习2:采用泛型程序设计技术改进实验九编程练习2,使之可处理实数四则运算,其他要求不变。

  1. package 算;
  2. import java.io.FileNotFoundException;
  3. import java.io.PrintWriter;
  4. import java.util.Scanner;
  5. public class z {
  6. public static void main(String[] args) {
  7.  
  8. Scanner in = new Scanner(System.in);
  9. Student student=new Student();
  10. PrintWriter out = null;
  11. try {
  12. out = new PrintWriter("text.txt");
  13. } catch (FileNotFoundException e) {
  14. e.printStackTrace();
  15. }
  16. int sum = 0;
  17.  
  18. for (int i = 1; i <=10; i++) {
  19. int a = (int) Math.round(Math.random() * 100);
  20. int b = (int) Math.round(Math.random() * 100);
  21. int c= (int) Math.round(Math.random() * 3);
  22.  
  23. switch(c)
  24. {
  25. case 0:
  26. System.out.println(i+": "+a+"/"+b+"=");
  27.  
  28. while(b==0)
  29. {
  30. b = (int) Math.round(Math.random() * 100);
  31. }
  32.  
  33. int C = in.nextInt();
  34. out.println(a+"/"+b+"="+C);
  35. if (C == student.d(a, b)) {
  36. sum += 10;
  37. System.out.println("恭喜答案正确");
  38. }
  39. else {
  40. System.out.println("抱歉,答案错误");
  41. }
  42.  
  43. break;
  44.  
  45. case 1:
  46. System.out.println(i+": "+a+"*"+b+"=");
  47. int D = in.nextInt();
  48. out.println(a+"*"+b+"="+D);
  49. if (D == student.m(a, b)) {
  50. sum += 10;
  51. System.out.println("恭喜答案正确");
  52. }
  53. else {
  54. System.out.println("抱歉,答案错误");
  55. }
  56. break;
  57. case 2:
  58. System.out.println(i+": "+a+"+"+b+"=");
  59. while(a<b)
  60. {
  61. a = (int) Math.round(Math.random() * 100);
  62. }
  63. int E = in.nextInt();
  64. out.println(a+"+"+b+"="+E);
  65. if (E == student.add(a, b)) {
  66. sum += 10;
  67. System.out.println("恭喜答案正确");
  68. }
  69. else { System.out.println("抱歉,答案错误");
  70. }
  71.  
  72. break ;
  73. case 3:
  74. System.out.println(i+": "+a+"-"+b+"=");
  75. int F = in.nextInt();
  76. out.println(a+"-"+b+"="+F);
  77. if (F == student.r(a, b)) {
  78. sum += 10;
  79. System.out.println("恭喜答案正确");
  80. }
  81. else {
  82. System.out.println("抱歉,答案错误");
  83. }
  84. break ;
  85. }
  86. }
  87. System.out.println("成绩"+sum);
  88. out.println("成绩:"+sum);
  89. out.close();
  90. }
  91. }
  1. package 算;
  2. public class Student<T> {
  3. private T a;
  4. private T b;
  5. public Student() {
  6. a = null;
  7. b = null;
  8. }
  9.  
  10. public Student(T a, T b) {
  11. this.a = a;
  12. this.b = b;
  13. }
  14.  
  15. public int add(int a,int b)
  16. {
  17. return a+b;
  18. }
  19. public int r(int a,int b)
  20. {
  21.  
  22. return a-b;
  23. }
  24. public int m(int a,int b)
  25. {
  26. return a*b;
  27. }
  28. public int d(int a,int b)
  29. {
  30.  
  31. return a/b;
  32.  
  33. }
  34.  
  35. }

实验总结:本章学习了泛型程序设计,泛型程序设计可以让程序更可读、更安全。它舍弃了不安全的强制转换类型;通过老师与主教学长的帮助,知道了什么是泛型程序设计,也知道了通配符是什么;在本次的实验中野实践了泛型程序设计。

201771010120 苏浪浪 面向对象程序设计(Java)第10周的更多相关文章

  1. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

                                                                      第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...

  2. 201871010132-张潇潇《面向对象程序设计(java)》第一周学习总结

    面向对象程序设计(Java) 博文正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cn ...

  3. 扎西平措 201571030332《面向对象程序设计 Java 》第一周学习总结

    <面向对象程序设计(java)>第一周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 ...

  4. 杨其菊201771010134《面向对象程序设计Java》第二周学习总结

    第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...

  5. 201871010124 王生涛《面向对象程序设计JAVA》第一周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://edu.cnblogs.com/campus/xbsf/ ...

  6. 201871010115——马北《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  7. 201771010123汪慧和《面向对象程序设计Java》第二周学习总结

    一.理论知识部分 1.标识符由字母.下划线.美元符号和数字组成, 且第一个符号不能为数字.标识符可用作: 类名.变量名.方法名.数组名.文件名等.第二部分:理论知识学习部分 2.关键字就是Java语言 ...

  8. 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  9. 201871010132——张潇潇《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  10. 面向对象程序设计--Java语言第二周编程题:有秒计时的数字时钟

    有秒计时的数字时钟 题目内容: 这一周的编程题是需要你在课程所给的时钟程序的基础上修改而成.但是我们并不直接给你时钟程序的代码,请根据视频自己输入时钟程序的Display和Clock类的代码,然后来做 ...

随机推荐

  1. java并发中ExecutorService的使用

    文章目录 创建ExecutorService 为ExecutorService分配Tasks 关闭ExecutorService Future ScheduledExecutorService Exe ...

  2. 美版健康码要来了!苹果Google被网友质疑:这是变相的监视系统吗?

    4 月 30 日消息,据外媒报道,由苹果和谷歌合作开发一个冠状病毒追踪系统将在 5 月 1 日正式上架,今天已经进入测试阶段. 图自:techcrunch 这款应用可以让 iOS 和 Android ...

  3. 【Linux常见命令】seq命令

    seq - print a sequence of numbers seq命令用于以指定增量从首数开始打印数字到尾数,即产生从某个数到另外一个数之间的所有整数,并且可以对整数的格式.宽度.分割符号进行 ...

  4. Failed building wheel for cytoolz

    2019独角兽企业重金招聘Python工程师标准>>> 当我使用 pip instlal cytoolz 时,  报以下错误: error: Microsoft Visual C++ ...

  5. 国际站中国区,孟买上Redis 4.0 集群版

    信息摘要: 国际站中国区,孟买上线Redis 4.0 集群版适用客户: 所有用户版本/规格功能: redis 4.0 集群版产品文档: https://www.alibabacloud.com/hel ...

  6. JAVA第一次blog总结

    JAVA第一次blog总结 0.前言 大一下学期我们开展了OPP这门课程,这也是我们第一次接触到JAVA.与上学期我们在学校里学C语言不同的是,这学期由于疫情原因我们是以网课的方式在学习.在学习中我发 ...

  7. C++课程设计详解-12306的模拟实现

    目录 设计思路... 3 思路分析:.... 3 数据组织:.... 4 具体功能实现过程... 4 管理端具体功能实现:.... 4 用户端具体功能实现:.... 5 调试截图和调试过程中遇到的问题 ...

  8. Python编程求解第1天1分钱之后每天两倍持续一个月的等比数列问题

    一.问题 问题1 场景:如果你未来的丈母娘要求你,第1天给她1分钱,第2天给2分钱,第3天给4分钱,以此类推,每天给前一天的2倍,给1个月(按30天)算就行.问:第30天给多少钱,总共给多少钱? 问题 ...

  9. muduo网络库源码学习————线程池实现

    muduo库里面的线程池是固定线程池,即创建的线程池里面的线程个数是一定的,不是动态的.线程池里面一般要包含线程队列还有任务队列,外部程序将任务存放到线程池的任务队列中,线程池中的线程队列执行任务,也 ...

  10. django最全面的知识点,直接开发完整手机购物商城练手,

    带手机验证码登陆, 带全套购物车系统 带数据库 前后端分离开发 带定位用户功能 数据库代码为本地制作好了 带支付宝支付系统 带django开发服务器接口教程 地址: https://www.duans ...