201621123062《java程序设计》第九周作业总结

1. 本周学习总结

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

思维导图1:(对集合部分做了一些改动和细化)

思维导图2:(泛型)

1.2 选做:收集你认为有用的代码片段

代码片段1:(取自PPT)

使用迭代器删除元素:

List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        Iterator<String> iterator = list.iterator();
        System.out.println(list);
        while (iterator.hasNext()) {
            iterator.next(); iterator.remove();
        }
        System.out.println(list);

运行截图:

代码片段2:(取自PPT)

Set(集)-HashSet:

Set<String> strSet = new HashSet<>();
        strSet.add("1");
        strSet.add("z");
        strSet.add("2");
        strSet.add("a");
        strSet.add("1");
        for (String e : strSet) {
            System.out.println(e);
        }

运行截图:

觉得很奇怪为什么运行结果元素的输出顺序没有按照代码里的顺序,后面问了一个大佬,说是因为HashSet里面是无序的,它是按元素的哈希值来决定他的顺序

2. 书面作业

本次作业题集集合

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

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

方法:

public E remove(int index):移除此列表中指定位置上的元素。向左移动所有后续元素(将其索引减 1)。

public void clear():从此列表中移除所有元素。

总结:这一题整体还是比较简单的,做的时候主要的问题是在对输入的字符串处理的时候,一开始我想要把输入的字符串转化成字符数组,但是如果使用tocharArray()方法转化以后,我不知道怎么实现题目的以空格(单个或多个)为分隔符,将line中的元素抽取出来,放入一个List这个要求,后来是看到群里有同学用了split方法,于是百度了一下这个方法:

split是分割的意思,主要是将字符串按照指定的符号分割成一个数组

然后就直接使用了这个方法解决了问题。

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

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

步骤:

1.根据上一题,已经做好了单词数量的统计,虽然本题不用字母排序但还是为了方便沿用上一题TreeSet

2.要改变的是需要统计每个单词出现的次数,考虑用HashMap实现对每一个单词进行次数统计

3.重写Collections中的sort方法,对集合中的每个单词次数进行比较并排序

4.输出

2.2.2 实验总结

总结:

这一题感觉做起来比较难,特别是第二步的实现。虽然想用HashMap数据类型但是不知道用什么方法,后来是参考同学的代码,发现可以用containsKey的方法进行单词次数统计。

2.3倒排索引(题集题目)

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

2.3.1 截图你的代码运行结果

运行结果1:

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

步骤:

文本的输入与行数的处理:

1.将文本按行读入,用一个动态数组存放每行输入的文本

2.在每一行文本输入的时候,定义一个字符串数组,利用split函数做字符串的分隔,并定义一个变量用于标记行数。

map映射表的建立:(key:字符串 value:对应行数)

3.遍历数组

4.建立单词第一次出现的map映射以及修改单词非第一次出现的map映射

5.打印索引表

查询单词输出对应单词行数:

6.输入的字符串文本依然做分隔

7.处理输入一个,两个,多个单词时的情况。---->定义两个动态数组,一个数组用于第一个单词的行数记录,第二个数组用于求后续遍历到的不同单词与第一个单词的行数的交集情况。

8.输出

2.3.3 实验总结

总结:

这一题对我来说难度较大,题目就看了很久,没有什么思路。首先要做的肯定是处理行数的输入和标记问题,后来一个做出来的舍友说可以用两个数组去解决,外面的动态数组存放输入一行的字符串,再用一个数组做动态数组分隔后的单词数组。于是我就用了这个方法。还有一个问题就是在处理单词交集的问题上,当时想的是第一个数组固定存放一个单词行数不变,第二个数组要不断变化,求和第一个数组的交集。于是我就以为第一个数组不需要使用动态的,但是我忽略了第一个数组是要存放单词对应的行数,不确定输入的单词对应行数有几个,数据还是动态变化的,其实两个都是要用动态数组。

至于后面的运行结果。。。也是试了很多种可能.

例如1:

输入了一个文本里面没有的,程序没有反应,后面发现遗漏了一个考虑点:

例如2:

这个我发现跟输出的答案不一样,但是PTA居然让我过了。。。然后我查了一下,是因为在第一个for里面我加了{},然后导致后面的循环有点乱,多打印出来一些东西。。。。(对于这种问题真的是很无解,因为这个错误找了两三个小时::>-<::)

2.4Stream与Lambda

编写一个Student类,属性为:

private Long id; private String name; private int age; private Gender gender;//枚举类型 private boolean joinsACM; //是否参加过ACM比赛

创建一集合对象,如List

2.4.1 使用传统方法编写一个搜索方法List

部分代码:

运行截图:

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

关键代码:

List<Student> students=stuList.stream().filter(stu1->stu1!=null&&stu1.getId()>10L&&stu1.getName().equals("zhang")&&stu1.getAge()>20&&stu1.getGender().equals(Gender.girl)&&stu1.isJoinsACM()).collect(Collectors.toList());

运行截图:

2.5泛型类:GeneralStack

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

2.5.1 GeneralStack接口的代码

接口代码:

 interface GeneralStack {
    public Object push(Object item);
    public Object pop();
    public Object peek();
    public boolean empty();
    public int size();
}

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

好处:ArrayListIntegerStack直接限定了数据类型是Integer类型的,而使用泛型方法,定义了GeneralStack接口,接口中的操作对任何引用类型的数据都适用,我认为这样的方式更加灵活,也可以避免强制转换带来的风险。

3.码云及PTA

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

3.1. 码云代码提交记录

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

3.2 截图PTA题集完成情况图

需要有两张图(1. 排名图。2.PTA提交列表图)

排名图:

PTA提交列表图:

3.3 统计本周完成的代码量

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

周数 行数 新增行数 文件数 新增文件数
1 57 57 5027 5027
2 400 400 10 10
3 508 508 23 13
5 609 609 31 8
6 612 612 40 9
7 584 584 46 6
8 432 432 50 4
9 620 620 56 6
10 468 468 60 4

自己的目标能实现吗?

基本可以。。。。

4. 评估自己对Java的理解程度

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

维度 程度
语法 PTA的题目大部分可以搞定,一些比较难的语法还没有掌握,基本的语法有的会忘记
面向对象设计能力 基本可以使用面向对象思想为所要解决的问题建模,但是有的时候要想很久
应用能力 可以使用Java编写一些x小程序
至今为止代码行数 4290
时间: 2024-08-02 20:29:10

201621123062《java程序设计》第九周作业总结的相关文章

机电传动控制第九周作业(一)

<机电传动控制>第九周作业(一) 1单相桥式晶闸管整流电路仿真 搭建的模型图: 当触发角为pi/4时,仿真结果为: 当触发角为pi/2时:仿真结果为: 触发角为pi/2,电感值为0.01时,仿真结果: 触发角为pi/2,电感值为1时,仿真结果为: 触发角为pi/2,电感值为0.5时,仿真结果: 触发角为pi/4,电感值为0.5时,仿真结果: 2三相六脉波桥式晶闸管整流电路仿真 搭建的电路图: 触发角为0,仿真结果: 触发角为pi/4,仿真结果: 触发角为pi/2,仿真结果: 触发角为0,电感为

机电传动控制作业第九周作业补充

机电传动控制作业第九周作业补充: 手绘波形图: 3. 直流电机开环调压调速系统模型搭建 搭建的电路图: 仿真结果之一: 问题: 我按照上图所示的电路进行仿真时,在调节电源电压的大小和触发角时,发现很难调节到使电机转速刚好在额定转速下运行,尤其在引入电感后,更加难以调节.所以我想问下老师我这个电路图搭建的有没有问题?我需要从何处改进呢?

2017-2018-1 20179205《Linux内核原理与设计》第九周作业

<Linux内核原理与设计>第九周作业 视频学习及代码分析 一.进程调度时机与进程的切换 不同类型的进程有不同的调度需求,第一种分类:I/O-bound 会频繁的进程I/O,通常会花费很多时间等待I/O操作的完成:CPU-bound 是计算密集型,需要大量的CPU时间进行运算,使得其他交互式进程反应迟钝,因此需要不同的算法来使系统的运行更高效,以及CPU的资源最大限度的得到使用.第二种分类包括批处理进程(batch process):实时进程(real-time process)以及交互式进程

2017-2018-2 20179205《网络攻防技术与实践》第九周作业

<网络攻防技术与实践>第九周作业 视频学习总结 一.KaliSecurity压力测试工具 ??压力测试通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能够提供的最大的服务级别的测试.通俗地讲,压力测试是为了测试应用程序的性能会变得不可接受. ??Kali下压力测试工具包含VoIP压力测试.Web压力测试.网络压力测试及无线压力测试. 1.Voip压力测试工具 包括iaxflood和inviteflood 2.web压力测试工具:THC-SSL-DOS ??借助THC-SSL-DOS攻击工

马凯军201771010116《面向对象与程序设计Java》第九周学习总结

一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3.程序中出现的常见的错误和问题有:用户输入错误.设备错误.物理限制.代码错误. 4.Java把程序运行时可能遇到的错误分为两类: (1)非致命异常:通过某种修正后程序还能继续执行.这类错误叫作异常.如:文件不存在.无效的数组下标.空引用.网络断开.打印机脱机.磁盘满等. Java中提供了一种独特的处

201621123041java程序设计第九周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 1. List中指定元素的删除(题集题目) 1.1 实验总结.并回答:列举至少2种在List中删除元素的方法. 本题实验要注意使用split语句时,如果要求一个或多个空格为分隔符时,要使用line.split(" +"); 可以使用remove函数来删除元素,也可以使用迭代器iterator的方法. 2. 统计文字中的单词数量并按出现次数排序(题集题目) 2.1 伪代码(不得复制代

《网络攻防》第九周作业

kali视频学习 第36节 压力测试工具1.VoIP压力测试工具web压力测试:2.thc-ssl-dos的验证.3.dhcpig 尝试耗尽所有IP地址4.ipv6工具包5.inundator IDS/IPS/WAF压力测试工具耗尽对方说的日志资源.6.macof可做泛红攻击8.t50压力测试9.无线压力测试mdk3和reaver 第37节 数字取证工具 数字取证技术是将计算机调查和分析技术应用于对潜在的.有法律效力的电子证据的确定与获取,同样他们都是针对黑客和入侵目的的.目的都是保证网络的安全

C语言程序设计第九次作业

一.学习内容      本次课我们重点学习了怎样向函数传递数组,鉴于大家对函数和数组的理解和运用还存在一些问题,下面通过一些实例加以说明,希望同学们能够认真阅读和理解.      例1:火柴棍拼数字     要用火柴棍拼出0-9之间的数字,输入任意一个数字,输出需要多少根火柴棍.用火柴棍拼数字0-9的拼法如图所示:  对于这道题,我们学过分支结构后,就可以编程实现.代码如下:      #include <stdio.h> int main() { int digit,count; print

《Java程序设计》第一次作业:源代码计算器

目的: (1)一门语言入门,需要编写至少2万行代码.那么,我们编写一个计算代码行数的程序,激励自己前行. (2)了解代码复用.重构的作用. 目标(递进关系,难度从小到大): 目标1:给定一个源代码文件(.cs, .java),输出该文件的总行数.空行数.注释行数.代码行数. 目标2:从命令行输入一个参数(指定目录或文件),输出该目录下指定类型文件(.cs, .java)的个数.每个文件的总行数.空行数.注释行数.代码行数. 目标3:从命令行输入两个参数(第一个参数:指定目录或文件:第二个参数:指