201621123040《Java程序设计》第2周学习总结
1.本周学习总结
关键词:Java中的字符串与数组 c语言基本语法的迁移
相关总结:在一周的学习过程中,我自主学习Java的基本语法,前期的相关语法与c语言的基本语法相近,也算是做到了很好的回顾;在郑老师的课上着重的学习到Java基本语法中的字符串与数组;我了解到java中的字符串String类具有不可变性;Java即已是面向对象的语言,在String类中存放并非是字符串对象,而是指向相关对象的引用;Java中的null并非同c语言中一样等于0,而是未分配内存;至于数组,从一维、二维向动态数组
ArrayList
的过渡,习得与c语言的数组相差甚多的基本语言(例:foreach实现数组的遍历)。
本周的Java学习内容丰富,需要将Java基本语法做到很好的吸收!
2.书面作业
2.1String-使用Eclipse关联jdk源代码
2.1.1查看String对象的源代码(截图),分析String使用什么来存储字符串?
- String使用char value[] 字符数组来存储字符串
2.1.2分析其构造函数public String(char value[])的作用?
- 利用一个已经存在的字符数组的内容来初始化新建的String对象。在操作过程中,把字符数组中的值复制导对象中,操作字符数组不会对字符串产生影响。(String的不可变性)
相关内容通过查阅图书获得
2.1.3阅读public String replace(char oldChar, char newChar)
方法的代码,回答String的不可变性在该函数中如何体现?(重点)
- 通过newChar替换此字符串中出现的所有oldChar得到的字符;实现这一替换函数的实质还是创建一个新的String对象,进而实现替换功能,原先的对象内容依旧存在,由此体现String的不可变性
2.1.4简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
字符数组是字符数据类型的集合;字符串是字符的序列,某种程度上类似于字符数组
在界面呈现文本内容的时候,用的是String的形式;String用于文本表示,这正是我们所需要的
2.2StringBuilder
2.2.1结合PTA 5-2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
- StringBuffer类的对象是可变的字符序列,即动态对象,动态修改;而String每次修改字符都是一次新建对象,占据存储空间多,编译速度加剧变慢;故而在频繁修改字符串时(数据量大的情况下),使用StringBuilder比String更有优势
2.2.2阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
append(char[] str)
实现字符串的追加
StringBuilder内部使用字符串String来存放字符
new StringBuilder().append(源字符串).append(需要添加的新字符串).toString()
实现左右两边字符的相加,最后转换为toString()返回
2.3字符串与字符串池
2.3.1尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
- 在字符串池中有了"hi"这个字符串对象,str1和str2共同使用"hi",本题输出结果应该是true;而str3是再建对象,故而在这段代码中创建了2个字符串对象。
2.3.2对基本类型我们可以使用==比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用==比较?应该怎样比较他们的值是否相等呢?
- ==在引用类型中比较的是对象相应的地址,因而创建不同的引用对象相应的地址自然不同,故==不适用引用类型的比较;可以通过使用
public boolean equals()
实现字符串对象间的比较。
2.4Wrapper(包装类)
2.4.1Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?
这实现了i的自动装箱,相当于执行了
Integer.valueOf(100)
;Integer x = 100
实现x的自动装箱;int y = x+1
先实现x自动拆箱,再进行x+1加法运算;x++
先实现x的自动拆箱,再进行x的自加运算。
2.4.2Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
- 通过包装类(即对象)更加体现Java面向对象的特点;包装类的自动装箱和自动拆箱实现代码的简化,方便编译。
2.5实验总结
2.5.1结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。
- 结对队友:普天
- 结对过程:首先是编程分块安排(综合小测代码题),我主要负责的是第二、三块,普天同学负责第一、四块;第一块通过c语言语法迁移,使用递归函数,普天同学在我的帮助下较快的完成fib函数块(主要花费的时间在于正确的格式输出),在他进行第四块的过程中,我们交换思路,求同存异,通过查阅java中截取字符串函数的相关语法,普天同学负责的部分在将近40分钟内得以实现;那至于我负责的部分则些许波折,首先是查阅信息准确性的失误(例:在实现[]包裹打包使用的相关语法上的使用便存在想法差异),以及字符串转换成Integer类的过程使用循环遍历函数的写法格式上存在疑惑,最后花费较长的时间完成二三两块。
- 结对体会:结对完成代码与独立完成在时间有些许的缩减;但在配合过程中也存在争论,到底哪种方法更合适本道题,双方意见起初的不一致也造成一定时间的浪费,不过在编译过程中我们的交流磨合最终实现代码的运行,我们意识到团队协作的意义所在:完成一个项目不是靠一个人单打独斗,在合作中我们要接受不一致,求同存异,吸纳对方编译思想的优越性,让我们今后的编译思维更加开阔;由于本次是初次合作,还未真正能体现"1+1>2",希望在以后的合作中能够更加体现。
2.5.2PTA-1综合小测验
- 对于本题,首先要确定框架(switch....case....),在逐步实现每一块相关代码的码入;
第一块(fib):输出斐波那契数列,通过c语言知识迁移使用递归算法实现第一部分;
第二块(sort):本块主要使用到Array.sort()
实现对输入数字(其中需要要实现字符串向Integer类的转换,通过for循环遍历实现,第三块通用)的排序,本块最值得注意的是要实现打包输出;
第三块(search):第三块与第二块彼此衔接,在排好数字顺序的前提下,使用Arrays.binarySearch( , )
实现查找功能,最后再使用if判断按要求输出;
第四块(getBirthDate):本块主要使用到字符串的截取,先截取出身份证号码的生日部分(第七位-第十五位),进而重构新的关于生日的字符串,在相应位置添加"-"(第五位、第七位),最后输出这一重构字符串完成本部分。
2.5.3PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
- 本题的第一部分sort1与综合小测编程题相似,实现生日相关位置字符串的截取,进而实现字符串的转换,再使用
Arrays.sort()
进行排序;对于第二块,犹豫、测试花费的时间是最久的,通过参考吸收同学sort2部分的代码,得到启发:可以使用冒泡法(前期截取方法与sort1相似)实现身份证生日的排序,且得到整个身份证的输出;由此同理,仍可以使用冒泡法实现降序排序。
2.5.4PTA-4动态数组
- 对于本题,首先嵌套了老师上课的基础模板,实现最终
Array.deepToString()
的输出;进而就要实现九九乘法表的相关输出,通过c语言的知识迁移,两个for循环的嵌套使用得以实现(for(int i=0;i<n;i++)
for(int j=0;j<i+1;j++)
),最后使用二维动态数组将其存储,实现九九乘法表的输出;本题出现最大的问题在于九九乘法表的格式输出,本题不能使用System.out.println()
,而应该使用System.out.printf()
。
- 通过吸收了解同学提交的正确格式代码,那么其中就要对结果输出作特殊处理:当每行的末尾乘法口诀(j=i),正常输出;其余的乘法口诀,可以采用左对齐的输出格式("%-7s"左对齐七个字符),比如12=2占五个字符,左对齐后还空余两个字符;当然25=10此时占六个字符,左对齐后还空余一个字符;故而左对齐七个字符是最佳的对齐形式。
2.5.5(重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
本题ArrayList入门,要严格按步骤进行,期间要使用字符串的插入(头插与尾插也是存在差异的
str.add()
,str.add(0, "begin")
)、字符串的查询(从头到尾与从尾到头的查询也是存在差异的str.indexOf()
,.lastIndexOf()
)、字符串的移除(str.remove()
)以及动态数组内容的清空(str.clear()
);对于我来说,本题的代码训练意义在于了解ArrayList动态数组中的相关操作语法的习得与训练。数组的长度由编译者创建该数组便确定好了,且不再发生改变,反观ArrayList为动态数组,它的储存容量实现动态变化,便于实现各种操作。
2.5.6选做:5-5(浮点数计算), 5-6(枚举), 5-7(大整数相加)
对此,我只完成了5-5(浮点数计算),5-7(大整数相加)。
5-5 对于本题,首先要知道两个浮点数Double型的直接相加/相乘是达不到精确的效果(例:1.0-0.1=0.899999)
这个方法并不适用;通过查询资料可知,java中对于浮点数的计算可以调用BigDecimal();先创建两个字符串(浮点型)
,再而创建两个BigDecimal()实现对两个字符串(浮点型)的迁移,最后创建BigDecimal add
、BigDecimal mul
实现两个BigDecimal的add算法与multiply算法,最后输出BigDecimal add
、BigDecimal mul
即可。5-7 对于本题,与5-5有共通之处,首先要知道int型的计算范围远远小于本题大整数的范围(int 范围为-2,147,483,648~2,147,483,647),这个方法也不适用;通过查询资料可知,java中对于大整数的计算可以调用BigInteger(),但是本题不仅仅只是两个数的相加,可以实现多个大整数的累加(遇到"e"/"E"方才停止累加),故而要套用循环
while(!a.equals("e")&&!a.equals("E")
,首先创建字符串,进而实现字符串向BigInteger的迁移,重要的是起初要创建一个BigInteger,使其的初始值为"0",再实现大整数的累加。
2.6选做:公交卡里应该还有多少钱?请分析原因
- 这张公交卡应该是已经欠款了;公交卡的充值上限在1000左右,出现4千多万的公交卡应该是因为卡内余额不足(<0)不符合刷卡系统的操作范围,故而溢出出现乱码。
3.码云及PTA
3.1码云代码提交记录
3.2截图题集“Java基本语法”PTA提交列表
3.3使用老师发的jar程序统计每周的代码量
-周数- | -总代码量- | -新增代码量- | -总文件数- | -新增文件数- | |||||
---|---|---|---|---|---|---|---|---|---|
2 | 304 | 304 | 9 | 9 |
201621123040《Java程序设计》第2周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- C#图解教程 第九章 语句
语句 什么是语句控制流语句if语句if-else语句while循环do循环for循环 for语句中变量的作用域初始化和迭代表达式中的多表达式 switch语句 分支示例switch语句补充分支标签 跳 ...
- GridView 翻页 索引超出范围
事件回顾 今天GridView翻页时,又遇到错误:索引超出范围.必须为非负值并小于集合大小. 这是当时的PageIndexChanging和RowCommand两个事件的后台代码 protected ...
- SOA和微服务架构
微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用.这些小应用之间通过服务完成交互和集成.每个小应用从前端web ui ...
- Keras官方中文文档:函数式模型API
\ 函数式模型接口 为什么叫"函数式模型",请查看"Keras新手指南"的相关部分 Keras的函数式模型为Model,即广义的拥有输入和输出的模型,我们使用M ...
- 没什么技术含量的Remove Before Flight
航空业有很多值得我们借鉴和学习的工作方式,将来有时间我会给大家引荐更多实例. 仔细观察每架停泊着的飞机,会发现机身很多地方都挂着细长的红布条,上面写着"REMOVE BEFORE FLIGH ...
- [ZJOI2006]书架(树状数组水过)
这道题显然平衡树,splay,treap什么的随便切 然而我不想打,决定水过这道题 把空间开3倍,树状数组维护它前面的树的个数,开个id数组记录位置 找一个数排名直接二分加求前缀和,log^2的搞一搞 ...
- RabbitMQ教程C#版 - Hello World
先决条件 本教程假定RabbitMQ已经安装,并运行在localhost标准端口(5672).如果你使用不同的主机.端口或证书,则需要调整连接设置. 从哪里获得帮助 如果您在阅读本教程时遇到困难,可以 ...
- 360加固apk并自动签名
我们知道Android加混淆之后,代码的安全性得到了提高,即使你hook,反编译得到的也是乱码的,对于阅读性造成了影响,为了增强代码的破解难度,我们通常退对apk进行加固,常见的有腾讯,360,爱加密 ...
- C#编写一款qq消息群发器
先上软件成品图 功能编写大概分为以下几个部分了: 获取QQ分组 发送消息 先来讲发送消息吧,实现还是比较简单 //这段主要是用来打开会话窗口的(只能列表中的好友进行会话的) System.Diagno ...
- 为eclipse安装subclipse(SVN插件)
1.打开eclipse,点击菜单Help->Install New Software 2.进入安装窗体后,点击安装窗体的右侧的Add按钮,然后在弹出的窗体中输入名称:Subclipse 1.12 ...