Week02-Java基本语法与类库

1. 本周学习总结

本周学习了什么事自动装箱和拆箱,以及如何利用打包器打包。以及在java的浮点数运算中需要运用BigDecimal,使用java.math.BigDecimal否则计算机将无法正确计算部分浮点数运算结果。还有 next()和next.Line()之间的区别next.Line()可以输入包含空格的字符。=只是在讲某个名牌绑到某个对象,而==是用在比较两个名牌是否绑到同一个对象上。关于类的定义与使用,了解了类和对象的区别。和定义函数以及调用函数在java中的使用。

2. 书面作业

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

1.2 分析其构造函数public String(char value[])的作用?
可以用来建char数组
1.3 阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)。
创建一个string字符串,实际上是创建一个这个字符串的引用,当改变这个字符串引用时,只是将引用指向新内容,不改变原来内容,原来的内容还是存在于其空间中。

1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
String和字符数组都是存放字符的结构。
String使用后,可以让它释放内存,节约空间。

StringBuilder

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

String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。>

string a="i";a+="i+1";,每次在后面追加都会重新申请一个能放字符串的内存空间;

StringBuilder 对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值,当修改 StringBuilder 时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。可以使用重载的构造函数之一来指定 StringBuilder 类的容量。>

在连续加入n个数字的时候可以自动扩容。
2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
1.append(char[] str)的功能是追加新的字符串到StringBuilder的末尾。
2.StringBuilder内部使用堆。
3.在原字符串的的末端添加传入的数组。

字符串与字符串池

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

String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1str2);>
输出结果为true,创建了两个字符串对象。str1和str2指向同一个对象,str3应用了new创造了第二个对象。
**3.2 重点:对基本类型我们可以使用
比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢?**
虽然创造了两个对象的值相同,但是所在的地址不同,引用>
>会出现错误的结果,应用>equas>.

Wrapper(包装类)
4.1 Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?
1.在JDK5.0之后,默认把 Integer i = 100;当作Integer i=new Integer(100),这叫自动装箱。
2.自动装箱;自动拆箱;x++是先拆箱成Int型,然后加1,再装箱成Integer类型。
4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
1.有时我们也需要将基本数据类型包装成对象来用
2.基本类型创建太多会对内存占用过多,所以使用包装类,引用一个对象,其 内存的占用量大大减少。可以减少内存占用。

实验总结###

5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。
{{uploading-image-886632.png(uploading...)}}
我选择舍友与我一同完成编程,他虽然基础比较差但是基本思路还是有的,但是他好像不太好理解我的思路,不过既然是同宿舍之间我觉得以后还是可以经常交流,对编程的我来说是有起到1+1<2的效果,通过这次编程,虽然我们花费了更多的时间,但是我学习到了自己还没有彻底理清自己的思路还无法和别人阐述的特别清晰。
fib部分:运用调用函数来完成
sort部分:输入数字,存入字符串数组,用Arrays.sort()函数将其排序,最后输出。
search部分:search:主要使用函数Arrays.binarySearch来完成。
getBirthDate部分:主要使用.substring获取其中所需要的年月日来再按题目要求输出。

5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
首先sort1提取出来身份证中的年月日和上边那道题有点类似,但是多了提取出来之后的升序排序。在sort2中首先和第一部一样先建立一个新的字符串数组,然后截取需要用来排序的部分存入新的字符串数组。排序要利用冒泡法。

5.4 PTA-4动态数组
这题需要利用二维数组,通过老师提供的getDynamicMatrix函数就可以创建此题需要的二维数组,利用两个for把九九乘法表存入字符串数组,然后再按题目要求对其用Arrays.deepToString进行输出就可以了。

5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
在做题时熟练运用ArrayList的用法就能很快的完成题目。因为ArrayList不用考虑数组的大小它是动态的用起来比较方便。以及容量动态增长
ArrayList可以在任意位置插入和删除项。
5.6 选做:5-5(浮点数计算), 5-6(枚举), 5-7(大整数相加)
5-5(浮点数的计算)此题相对简单,是我PTA第一题完成的题目,但后来发现java与C在浮点数计算上有很大不同,需要用上BigDecimal才能精确计算浮点数。运用上BigDecimal之后就变得很简单了短短几行便可达成需要。

3. 码云及PTA

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
3.2 截图题集“Java基本语法”PTA提交列表

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

注意:请使用学姐更新的1.0版,使用新版前请先删除以前information.txt

posted @ 2017-09-23 18:45  鸡肉味嘎嘣脆  阅读(198)  评论(4编辑  收藏  举报