第二次作业

1. 本周学习总结#

(1). equals是比较指向对象的内容是否相等 ==用于比较两个引用类型变量存放的引用是否相等

(2). 直接引用双引号创建字符串,会在字符串常量池中创建字符对象,如已经有则直接复用

(3). String 对象是不可变的

(4). 数组一旦确定无法改变,若想要改变,可用动态数组ArrayList

2. 书面作业#

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

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

答:通过char数组进行保存字符串

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

答:用字符型数组value来存放String对象。

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

如图

在字符串进行替换时,返回了一个新的字符串常量,这样会在内存中产生大量的String对象,耗费大量的时间,占用大量内存

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

String 由于不可变性不可以对字符串进行修改,但是可以加快字符串的处理速度,不需要考虑字符串长度等优点,相比于字符数组,String更便捷。

2 StringBuilder##

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

String具有不可变性频繁修改字符产生大量String对象,耗费大量时间内存,用StringBuilder,new操作只进行了一次,也就是说只产生了一次对象,在对象的基础上进行多次append操作,本质上是对字符数组进行操作。

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

如图(1)

(2)内部使用char数组存放字符

(3)append函数使数组动态扩展,将输入的字符添加到StringBuilder中

3. 字符串与字符串池##

3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);###

输出结果为true
直接使用双引号创建字符串,会在字符串常量池中创建字符对象,如果已有则不创建直接复用

在题目中我们可以知道hi在常量池中已经存在,所以str1与str2同时只想常量池中的hi,而str3则是通过new操作创建了一个新的对象。

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

答:==用于比较两个引用类型变量存放的引用是否相等即判断存放的地址是否相等;而equals比较指向的对象内容是否相等

4. Wrapper(包装类)##

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

答:将基本类型转换为Integer类型,这是自动装箱。
Integer x = 100包含了自动装箱,int y = x+1;包含了自动拆箱,x++;包含了拆箱与装箱。

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

答: Java是面向对象的一种语言,基本类型都有对应的包装类,可实现基本类型之间的转换,也便于函数之间的传值

5. 实验总结##

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

我的技术太菜,如果只跟一个人讨论的话,我根本不能在短时间想出一道题目的如何做,所以我选择跟舍友一起讨论,因此结对的不是一个人,是寝室的舍友一起参与,我觉得结对编程对我还是有很大的帮助,站在巨人的肩膀上可以看得更远,比如在输入输出问题上,跟舍友讨论往往可以知道自己哪里格式错误以至于pta通不过。同时让我更多的知道了一些函数的应用,比如在综合小测试中的 System.out.prinntln(Arrays.to String(y)),就可以直接写入【】,这如果由我一个人完成的话,我会花费大量时间在代码中自己写入【】,往往在pta中通不过,在于舍友谈论过程中,我似乎因为知识不足,大部分时间处于聆听的状态,我会尽可能的让自己多多参与进来
【】###5.2 PTA-1综合小测验###
在这道题目中,用Array.sort()进行排序,str.subString(begin, end);用来截取字符串,private static void search(int n);对于函数的调用, System.out.prinntln(Arrays.to

String(y));在输出结果中自动写入【】

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

用substring截取数字串片段,用compare to()进行大小的比较,排序用冒泡排序法,降序则将出生日期的数组倒着输入,按照月份排序,则只用截取身份证的月份就好

5.4 PTA-4动态数组###

使用动态二维数组,最后输出System.out.prinntf("%-7s", array[i][j]);

5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?###

数组一旦确定大小,就无法改变,而使用ArrayList动态数组,可以改变大小,但是无法存放基本数据类型,只能存放引用类型
add 添加

remove 移除

get 获取

size 返回元素个数

isEmpty 若列表为空,则返回true

contains 若列表中包含指定元素,则返回true
摘于老师预习课件

3. 码云及PTA##

3.1 码云代码提交记录###

3.2 截图题集“Java基本语法”PTA提交列表###

3.3 使用老师发的jar程序统计每周的代码量###

posted @ 2017-09-23 19:10  李天歌  阅读(327)  评论(1编辑  收藏  举报