神离

博客园 首页 联系 订阅 管理

Week02-Java基本语法与类库

1. 本周学习总结

包装类的概念与基本数据类型的区别,自动拆箱和装箱,一维数组存放引用,foreach循环,多维,不规则数组初始化,动态数组常用方法:add,size,isempty,contains等,substring(start, end)函数Arrays.binarySearch(xx[],key)函数

2. 书面作业

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

因为配置src.zip时eclipse不停出错,所以把同学的截图借来(已经过本人同意)展示

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

字符串用字符数组来存储,我的理解是: string s = "abcd" =》 char[ ] = {a,b,c,d}

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

通过char数组构造一个字符串对象。

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

表面上是一个String对象在被改变后输出,但字符串是不可改变的,所有的String类中方法
并不是改变
String对象自己,而是重新创建一个新的String对象。所以输出的是一个全新的字符串。

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

java是面向对象的语言,每个类组装成可行的程序,字符数组不像string类有多种现有的函数
用以调用
,使用上不符合java的习惯,操作上也没有string类来的方便

2.StringBuilder

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

string具有不可变性,频繁修改字符串时string在不断创建新的字符串,会大大占用内存空间,
stringbuild就可以避免这种情况,运行时间也会大大减少。

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

这题真不知道,引用同学陈晓菲的回答:

append(char[] str)的方法是把指定字符数组按顺序添加到StringBuilder的对象中。在它内部 使用char[]数组来存放字符到字符串缓冲区中,它是通过将传入进去的字符转换成字符数组后 添加到StringBuilder对象中去。

3.字符串与字符串池

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

String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
输出true,总共创建两个对象,str1创建hi存入字符池中,str2创建hi时池中有相同的字符,于是两者
指向同一个对象hi,str3使用间接创建,于是创建一个新的对象,

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

比较运算符””是对内存地址进行比较,引用类型内容相同,内存不一定相同,(如3.1所说)因此不能用””比较。

4.Wrapper(包装类)

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

这是java中自动装箱语句,先将100变为integer类型(装箱),将integer转换为int型(拆箱),最后先拆箱再装箱。

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

答:Java是一种面向对象的语言,直接对基本数据类型操作比较麻烦,包装类已经包含了许多函数,使用上更方便,基本数据类型的操作更快。

5.实验总结

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

结对队友:张雨阳。

结对题目:身份证排序

我觉得五分钟太短,思路和代码还没统一起来,思路就被打断,二十分钟会是比较合适的时间,这样
才会对自己的代码有很清晰认知,知道在干什么(也许时因为我水平很差)。但是换着编操作性不高
,我要先理解队友的思路,代码,然后按着他的思路走,(最后放弃换着编的做法)还是各自编各自的
但思路可以分享,思路比较重要。如果对方水平高,结对编程效率确实很高(毕竟我很菜)。

5.2 PTA-1综合小测验

难度不大,很多都有现成的函数来直接实现,需要注意字符数组和整形数组的转换时需要在循环外
先定义整形数组用于存放sort排序好的数组,主要用到

line.split(" ");分割字符串

Arrays.sort()升序排列数组

Arrays.binarySearch数组查找

Arrays.toString(digits)包裹输出 等函数

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

sort1很好实现,substring函数抽取身份证对应数字用+连接,再用sort函数进行升序输出即可,但是sort2
有点难,我参考了室友的代码,我用他的方法:将年月日数组和身份证号码下标对后,冒泡法排列
年月日数组,在调换大小位置时把对应的身份证数组元素也调换位置,最终输出身份证数组

如果要降序,只需在冒泡部分将判断大小的语句反转就可,按照出生月份排序只需把月份作为年月日数组的唯一元素
即可

5.4 PTA-4动态数组

将动态分配的过程放到函数中去进行:

String[][] strs = new String[n][];

strs[i] = new String[i+1];

注意输出时要求间隔七个字符的位置"%-7s"就没有大问题了

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

使用ArrayList的函数,atr.add(),str.lastIndexOf(),str.contain(),str.indexOf(),str.remove(),str.get()等,本题难度不大。

ArrayList是动态的,但数组是不可变的,在无法确定数组长度时,使用ArrayList的可变性就很方便

3. 使用码云管理Java代码

3.1 GIT使用

在码云上建立你的项目(项目名:java+学号,如java201321123001)。同步到本机后,建立exp1包,编写HelloWorld,并推送到远程仓库。请截图本机(本地项目、本地仓库)、远程仓库。加分项:使用命令行Git对代码进行管理。

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

3.3 使用学姐、学长开发的jar程序统计每周的代码量

||周次|总代码量|新增代码量|总文件数|新增文件数|
|-😐-😐-😐-😐-😐
|2|281|281|9|9|

posted on 2017-09-23 20:24  神离  阅读(142)  评论(0编辑  收藏  举报