Java第十周的作业

1.本周学习总结

1.1以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。

1122718-20171118214022109-1798711722.png

2.书面作业

本次作业题集 集合

2.1. List中指定元素的删除(题集题目)

2.1.1 实验总结。并回答:列举至少2种在List中删除元素的方法。

  • convertStringToList(String line)方法中,通过split(" +")方法来按照一个或者多个空格进行字符串的数组划分,在新建一个list,将数据通过add导入,最后return list
  • remove方法中,要调用到ArrayList中的remove方法,先通过for循环遍历输入的list,再用if语句判断list中是否存在输入的字符串str,如果存在则list.remove()之后要加一个i--否则会出现隔一个遍历一个的情况。

    2.2. 统计文字中的单词数量并按出现次数排序(题集题目)

    2.2.1伪代码(不得复制代码,否则扣分)

Map<String,Integer> map = new HashMap<String,Integer>()
while(系统有下一个输入)
    String line = sc.nextLine()
    if(line等于!!!!!)
        break
    lineScanner = new Scanner(line)
    while(lineScanner存在下一输入)
        读入键str
        if(map存在键str)
        map.put(str,map.get(str)+1)
        else
        map.put键对应的值为1
    List<Entry<String,Integer>> list =new ArrayList<Entry<String,Integer>>
    Collentions.sort(list,new Comparator<Map.Entry<String,Integer>>){
    if(getValue相同)
    用compareTo比较Key1和Key2
    else
    返回getValue2-getValue1
}       

2.2.2 实验总结

  • 将输入的单词处理后存入到map中,先通过map.containsKey(str)判断map中是否有这个单词,如果有就直接将对应单词的值Value+1,如果没有就添加这个词,再将其Vlaue置1
  • 用到Scanner lineScanner = new Scanner(line)while(lineScanner.hasNext()),String str = lineScanner.next()来调用输入的值
  • 覆写Collect.sort()的排序方法

    2.3. 倒排索引(题集题目)

    本题较难,做不出来不要紧。但一定要有自己的思考过程,要有提交结果。

    2.3.1 截图你的代码运行结果

    1122718-20171118183447109-587328840.png

2.3.2 伪代码(不得复制代码,否则扣分)

while(判断输入条件是否满足!!!!!)
split拆分字符串
for(循环String数组)
if判断map中是否存在当前单词
{map.put(words[i],arrlist)}
else
{
    map.get(words[i])
    if判断取出的arraylist是否存在重复数据(行数)同一行的数据{不存在->map.put}
}
查找元素部分:
while循环下
if判断map中是否存在单词
{
    if(列表a是否为空)
        map.get(data[j])
    else输入的单词不止一个
    {
        b=map.get(data[j])
        for 循环a列表的元素个数的次数
        {if  b中不存在a中元素,则删除a中的该元素}
        if{a.isEmpty()}
            输出未找到结果
   }
}

2.3.3 实验总结

  • 通过新建TreeMap来满足输出时的格式要求,因此String为键型,ArrayList<Integer>为值型
  • 新建一个int indext来表示行数,通过while循环判断输入的字符串是否为!!!!!
  • split方法将字符串分为String数组,调用for循环比较,如果map中没有当前单词,就新建一个arraylist将当前行数add到其中,再map.put将值的集合添加到键中。反之,如果存在,就要map.get获取当前单词所对应的值的集合,再判断当前集合中是否存在index,以此来判断同一行是否出现过相同的单词,如果没有,就执行添加行数和map.put操作
  • 通过List<Entry<String,ArrayList<Integer>>> list=new ArrayList<Entry<String,ArrayList<Integer>>>(map.entrySet())转换类型,再通过for循环输出。
  • while循环下,新建两个ArrayList,a和b。对输入的字符串进行数组拆分后,调用for循环,再通过if判断map中是否存在该单词,存在的话判断a是否为空,如果为空就获取当前单词对应的列表list,反之意味着就是这一行有第二个单词了,把第二个单词存在的list给b,通过for循环运行a的行数的次数,用if判断ab中相同的行数,如果b中不存在a的第t个元素的话,就是在a中删除当前t对应的行数。如果a被删成空表,就输出found 0 results

    2.4.Stream与Lambda

    编写一个Student类,属性为:
    private Long id; private String name; private int age; private Gender gender;//枚举类型 private boolean joinsACM; //是否参加过ACM比赛
    创建一集合对象,如List,内有若干Student对象用于后面的测试。

    2.4.1 使用传统方法编写一个搜索方法List<Student> search(List<Student> stuList, Long id, String name, int age, Gender gender, boolean joinsACM),然后调用该方法将id>某个值,name为某个值, age>某个值, gender为某个值,参加过ACM比赛的学生筛选出来,放入新的集合。在main中调用,然后输出结果。(截图:出现学号、姓名)

  • 输出的是学号大于输入id201621123080L,性别为男,名字为suwl,年龄大于15,参加过ACM的人。
    1122718-20171118200157406-397293563.png

1122718-20171118205235562-632814203.png

1122718-20171118205346406-1426745273.png

2.4.2使用java8中的stream(), filter(), collect()编写功能同4.1的代码,并测试(要出现测试数据)。构建测试集合的时候,除了正常的Student对象,再往集合中添加一些null,你编写的方法应该能处理这些null而不是抛出异常。(截图:出现学号)

1122718-20171118210405109-1780350412.png

1122718-20171118212405624-1162569550.png

2.5. 泛型类:GeneralStack

题集jmu-Java-05-集合之GeneralStack

2.5.1GeneralStack接口的代码

1122718-20171118212800781-506319654.png

2.5.2 结合本题与以前作业中的ArrayListIntegerStack相比,说明泛型有什么好处

  • 提高代码的复用性,减少重复代码的工作量
  • 减少局限性,我们只需要通过对类型进行声明就可以改变不同代码在对于不同元素的操作。

    3.码云及PTA

    题目集:jmu-Java-05-集合

    3.1 码云代码提交记录

  • 在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

1122718-20171118215023515-1900151196.png

3.2 截图PTA题集完成情况图

需要有两张图(1. 排名图。2.PTA提交列表图
1122718-20171118215054296-2030729167.png

1122718-20171118215132265-399016441.png

3.3 统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中。

周次总代码量新增代码量总文件数新增文件数
112012022
228016053
3590310105
4780190122
51290510175
61710420203
72513803244
825130240
93014501273
103441327303

3.4评估自己对Java的理解程度

尝试从以下几个维度评估自己对Java的理解程度

维度程度
语法PTA的题目暂时还不能全部轻松搞定,需要通过搜索引擎,以及与同学的交流探讨完成
面向对象设计能力能够完成一些比较简单的面向对象设计
应用能力可以编写一些简单的小工具
至今为止代码行数3400

转载于:https://www.cnblogs.com/suwl/p/7857873.html

Java程序设计》课程实验指导书程序代码(答案)(实验四:java继承与多态),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验四 java继承与多态 一、实验目的: 掌握继承、多态的概念与实现方法; 掌握包和接口定义和使用方法; 了解JAVA语言实现多继承的途径; 二、实验内容: 1.分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要: (1) Point2D有两个整型成员变量x, y (分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化。 (2)Point2D有一个void型成员方法offset(int a, int b),它可以实现Point2D的平移。 (3)Point3D是Point2D的直接子类,它有有三个整型成员变量x,y,z (分别为三维空间的X,Y,Z方向坐标),Point3D有两个构造方法:Point3D(int x,int y,int z)和Point3D(Point2D p,int z),两者均可实现对Point3D的成员变量x, y,z的初始化。 (4)Point3D有一个void型成员方法offset(int a, int b,int c),该方法可以实现Point3D的平移。 (5)在Point3D中的主函数main()中实例化两个Point2D的对象p2d1,p2d2,打印出它们之间的距离,再实例化两个Point2D的对象p3d1,p3d2,打印出他们之间的距离。 2.定义抽象类Shape,抽象方法为showArea(),出面积并显示,定义矩形类Rectangle,正方形类Square,圆类 Circle,根据各自的属性,用showArea方法出各自的面积,在main方法中构造3个对象,调用showArea方法定义接口DiagArea,其中包含方法double getDiagonal()对角线, double getArea()面积,定义一个矩形类,实现此接口,并自行扩充成员变量和方法定义一个正方形类继承矩形类(如矩形有w和宽h,正方形有边x,并有相应的构造函数,有一个方法中一次直接显示边、面积和对角线),在另一类中的主方法里使用测试该类。 三、实验要: 1. 能实现类的继承关系; 2. 用多种方法创建各个类的对象; 3. 程序应包括各个被调用方法的执行结果的显示。 4. 写出实验报告。要记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)定义Point2D,及定义它的属性和方法定义子类Point3D,及定义它的属性和方法;在Point3D中的主函数main()中实例化两个Point2D的对象,并通过这两个对象调用它们的属性和方法,输出方法执行结果。 2.(第2题)定义抽象类Shape,抽象方法为showArea(),再定义矩形类Rectangle,正方形类Square,圆类 Circle,和各自的属性。定义主类、主方法,在main方法中构造3个对象,调用showArea方法定义接口DiagArea,其中包含方法double getDiagonal(),在主main方法中输出方法执行结果。 五、自做作实验 1.定义一个描述人的基本类,该类包括人的性别和出生日期两个数据成员,以及设置和获取这些属性值的方法成员;再定义一个大学生类,使大学生类具有人的所有属性外,还具有姓名、学号,大学入学成绩,籍贯属性以及设置和获取这些属性值的方法成员;编写完整的程序,完成一个具有班级学生信息管理功能的程序。 2创建一个接口Shape,其中有抽象方法area,类Circle 、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象;如是2,生成Rectangle对象;如是3,生成Star对象)。然后将Vector中元素依次取出,判断其是否为Star类。如是返回其是个Star。否则返回其面积。 3..学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学生的管理和对教师的管理在他们身上都有体现。 1)设计两个信息管理接口StudentManageInterface和TeacherManageInterface。其中,StudentInterface接口包括setFee()方法和getFee()方法,分别用于设置和获取学生的学费;TeacherInterface接口包括setPay()方法和getPay()方法,分别用于设置和获取教师的工资 2) 定义一个研究生类Graduate,实现StudentInterface接口和TeacherInterface接口,它定义的成员变量有name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。 3) 创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足2000元,则输出“provide a loan”(需要贷款)信息。 提示: 1)定义两个接口,分别在其中申明两个方法。 2)定义主类Graduate,实现这两个接口。 3)定义主类的成员变量,和构造方法。 4)给出四个接口方法的实现。 5)给出一个计算是否需要贷款的方法,在里面统计年收入和学费,并输出是否需要贷款的信息。 6)写main方法。在其中创建一个姓名为“zhangsan”的研究生,调用计算是否需要贷款的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值