201621123058《java程序设计》第二周学习总结
1.本周学习总结
这周java的学习了解到了java种的基本引用类型,java是面向对象的一种语言,内存中储存了基本类型,还有各
种对象。了解了一些运算符和表达式的使用以及各种类型数据,`boolean`、整数类型、浮点类型。还有就是一些
基本的输入输出以及数组的基本定义:如何定义一维数组、多维数组。慢慢试着学会一些基本java程序的编写。
2. 书面作业
2.1 String-使用Eclipse关联jdk源代码
2.1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?
从源代码来看,`String`是使用字符数组来储存字符串。
2.1.2 分析其构造函数public String(char value[])
的作用?
通过char数组转换成String对象,char作为接口的数组。>来自360问答
2.1.3 阅读public String replace(char oldChar, char newChar)
方法的代码,回答String的不可变性在该函数中如何体现?(重点)
根据源代码中`private final char value[];`可以看出String的不可变性,从final中可以看出其不可变性。
2.1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
String通过字符数组储存字符串,字符数组是我们常用的处理字符串的方法,String本质上就是字符数组,但要
呈现在软件页面上得是文本,这时String就派上用场了。>来自360问答
2.2 StringBuilder
2.2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
在频繁改变字符串时要占用大量内存 ,而`StringBuilder`在频繁修改过程中不会占用太多的内存空间,`String`
为不可变,每一次要重新创建空间储存字符串。
2.2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
2.3 字符串与字符串池
2.3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
`String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);`
创建了三个字符串对象。
2.3.2 重点:对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢?
对于基本类型`==`比较的是地址是不是相等,然而引用类型是内容相等,但地址并不相等。如果要比较他们
的值应该使用`a.equals(b)`。
2.4 Wrapper(包装类)
2.4.1 Integer i = 100;
//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;
这一串命令中包含了些什么操作?
在程序运行是100会被自动装箱,包括了程序运行时的一些自动装箱,拆箱操作。
2.4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
-基本数据类型之间不能直接转换,得通过包装类来实现转换。
-可以方便函数之间值得传递。
-有些要用到Object的地方能够将基本数据类型进行转换。
2.5 实验总结
2.5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。
合作对象:林裕恒
感受、体会:结对编程效果还是比一个人蒙头苦想要容易一点,毕竟两个人碰到困难两个大脑在思考,所以还是比较喜欢结对编程的
形式(但是我所理解的结对合作的方式是遇到问题可以和别人去讨论,并非要这种坐在一台电脑前,轮换着打代码)。对自己和伙伴的编程提高都有所帮助。
2.5.2 PTA-1综合小测验
本题大致分为四个部分,fib、sort、search、getBirthDate,主要的还是取生日和对一串数进行排序这两个,取生日和第二题中的身份证验证差不多
排序的话就用到`Array.sort()`进行排序。
2.5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
大部分时间都花到这道题目上了,刚开始想接着老师的代码打,结果发现解决不了。最后上网查了代码,然后慢慢自己改才解决的。通过创建三个strs数组,
对于sort1主要是先将6-14位取出来,然后对取出来的这些字符串利用函数`Collections.sort();`进行排序;倘若是要对其进行降序排序,则将出生月份取出来并
将其转换位整型,在进行排序。
2.5.3 PTA-4动态数组
最开始只是简单的把九九乘法表打印出来,并没有将后面那一串打印出来,不知道`Arrays.deepToString()`的用法,后面经过询问同学后才懂得。还有就是pta
中的格式问题,“%-7s”就可以解决“从第1个2开始到第二项`2*2=4首字母之间,总共有7个字符(包含空格,此例中包含2个空格)”这个问题。还有要注意的就是
最后那个后面不能有空格,我的处理方式如下图:
2.5.4 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
本题考查的是jdk中一些现存函数的使用,然后联系学到的知识对这些函数进行使用。ArrayList是为动态数组,占用内存少,而且更加方便功能齐全。
2.5.6 (浮点数计算)
上课时老师提到过,浮点数之间不能直接相加减,应该用到BigDecimal。
2.6 选做:公交卡里应该还有多少钱?请分析原因
公交卡中出现四千万余可能因为公交卡欠款,所以程序出现乱码。
3.码云及PTA
3.1 码云代码提交记录
-在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
3.2 截图题集“Java基本语法”PTA提交列表
3.3 使用老师发的jar程序统计每周的代码量
周次 | 总代码量 | 新增代码量 | 总文件树 | 新增文件数 |
---|---|---|---|---|
2 | 424 | 424 | 9 | 9 |