201621123013 《Java程序设计》第2周学习总结

1.本周学习总结

关键字:
·String类特点和StringBuilder类
·包装类(自动拆箱和自动装箱)
·foreach循环(一维数组中)
·基本使用ArrayList动态数组


2.书面作业

1.String-使用Eclipse关联jdk源代码

1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?

答:String使用字符数组来存储字符串。

1.2 分析其构造函数public String(char value[])的作用?

答:通过字符数组,再生成一个String对象。

1.3 阅读public String replace(char oldChar, charnewChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)

答:在字符串替换时,是再创建一个新的字符串,然后返回这个字符串的字符串常量,而不是直接对原有的字符串进行操作,所以原字符串不会发生改变(不可变性)。

1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?

答:二者关系:String是String类的对象,而字符数组就是数组,String就相当于是将字符数组装起来。在有些时候,比如需要频繁修改字符串的时候,我们就使用字符数组会比较好,不会造成空间浪费,而在需要用到String的不可表性时,就用String比较简便,各有特点。


2.StringBuilder

2.1 结合PTA -2(StringBuilder),说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?

答:因为String的不可变性,每次修改就会产生新的对象,当我们频繁修改时就会生成大量的对象,当许多对象没有被调用的时候就会影响效率和造成资源的浪费。而StringBuilder,只是对自己本身进行操作,不会产生新的对象,所以频繁修改字符串时,应该使用StringBuilder而不是String。

2.2 阅读jdk文档,查询StringBuilder的append(char[]str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?

答:1、功能是添加这个字符数组参数的表示形式到对应的序列中去。
2、使用字符数组存放字符。
3、将字符数组中的参数有序地添加到此序列中,这个序列的长度相应地增加参数的长度。


3.字符串与字符串池

3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:

String str1 ="hi", str2="hi";
String str3 = new String(str1);
System.out.println(str1==str2);
答:
1、结果为:true
2、共创建了两个字符串对象,str1和str2都是指向同一个内存地址的,故可以知道他们为同一个对象,而后面通过new又创建了新的对象str3,所以总共有两个。

3.2 重点:对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢?

答:我们要比较两个值是否相等,得判断是“”还是“equals”。“”比较的是内存地址是否一样,而“equals”比较的是内容是否一样。


4.Wrapper(包装类)

4.1 Integer i =100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?

答:
1、因为Integer是int的包装类,就会有自动拆箱功能,因此可以将100赋值给i。
可以将100赋值给i。
2、Integer x = 100; int y = x+1;``x++;第一句包含自动拆箱;第二句包含自动装箱;第三句就是先拆箱后装箱(上课有讲)

4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?

答:从一开始的概念出发,java是一种面向对象的语言,而且包装类能实现和String以及基本类型的转化,而且包装类能很明显地带给我们很大的便利。


5.实验总结

5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。

答:结对队友:郑鑫煌。a.一开始判断题目,讨论了我们想法,交换了我们的思路之后,我先开始写代码,队友开始用手机和java书开始查阅相关资料,按照步骤,我们简单地讨论之后,他还是有点不能接受,之后再给他认真讲解我的代码和具体想法,再经过我们的努力还是解决了一些问题 b.对于我个人来说呢,我比较喜欢自己审题,做题,然后遇到一些问题,自己查资料或者百度,因为每个人对于题目的见解都会不同,第二个人的思路很有可能被第一个人给思维定式住(要继续打下去),我觉得这样不利于编程能力的提高,独立思考,自行解决问题的能力非常重要对于我们来说,也不利于我们开拓编程思路。


5.2 PTA-1综合小测验

答:其中fib函数就用到了简单的递归即可,而sort函数需要用到一些函数比如split函数,而search函数就要用到上一个sort函数,最后一个就是getBirthDate函数,其中用到了substring函数(自己查资料获知),个人觉得本题思路比较清晰,就是繁琐了一点,可是我还是遇到很多问题,看起来虽然清楚,但是实践就会碰壁,虽然自己pta还未编译成功,但是我还是会去请教能力强的同学来帮忙。

5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?

答:这也有用到第一题中的getBirthDate函数的思想,但是还是考虑到升序的问题,将年月日字符转化为数组,然后用冒泡法就可以了。降序就是反过来比较就可以的。


6.PTA截图

7.码云


关于代码统计,用不了(舍友也是),很抱歉。问题:显示的代码量为0,可是明明有代码,也不懂为啥(还是可能是我自己输入有错?)


posted @ 2017-09-23 21:51  Aning13  阅读(371)  评论(5编辑  收藏  举报