201621123001 《java程序设计》第2周学习总结
1. 本周学习总结
- 学会
String类的一些用法,比如用subString()截取字符串,频繁对字符串进行修改应使用StringBuilder()等。 - 学会
Array类的一些用法,比如sort()排序,deepToString()打印二维数组等。 - 学会调用函数。
- 了解了
equals与==的区别. - 学习了一种新的循环
foreach循环,格式为for(type element:arr)。 - 了解了
ArrayList动态数组的基本使用方法等。
2. 书面作业
1. String-使用Eclipse关联jdk源代码
1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?
Answer:【截图】
- String用char[]数组存储字符串,只是没有提供可以动态增加数组长度的能力。
1.2 分析其构造函数public String(char value[])的作用?
Answer:
【作用】

1.3 阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)
Answer:【截图】
- String不可变性:在代码中可以看到
return new String (buf , true),所以可以知道在对字符串进行替换的时候,返回了一个新的字符串常量。那么如果有大量的字符串需要进行修改的话,就会生成很多新建String对象,当内存中变量多了的话,效率就会降低。
1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
Answer:字符数组就是char[]形式,String就是封装了字符数组。String比较方便啊,还自带很多方法,不用白不用呀,最方便的就是不用考虑字符串的长度,也不用自己申请和释放内存。
2. StringBuilder
2.1 结合PTA 5-2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
Answer:
String 具有不可变性, 因此在每次对 String 类进行修改的时候,其实都生成了一个新的对象,每次生成新对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,那效率是会受影响变慢的。
StringBuilder 的对象是动态对象,也可说是一个可变的字符串序列 ,StringBuilder类是可以在不建立新的字符串对象的情况下进行字符串的修改,也因此大大提高了效率。
这个类所产生的对象默认会有16个字符的长度,当然也可以为它可容纳的最大字符数指定一个值。此值称为该对象的容量,如果附加的字符超出可容纳的范围,则StringBuilder 对象会自动增加长度来容纳被附加的字符。 ——引用 My Heart Will Go On 《java中stringBuilder的用法 》
2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
Answer:

- 内部使用char[] value数组来存放字符,使用char字符数组参数按顺序追加该序列的内容。这个序列的长度增加该参数的长。
3. 字符串与字符串池
3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = newString(str1); System.out.println(str1==str2);
Answer:输出结果为true。
- 这段代码创建了两个字符串对象,str1 和 str2 都指向同一个存放的地址,即同一个字符串对象,而 str3 进行了newstring的操作,也就告诉了我们创建了一个新对象。
3.2 重点:对基本类型我们可以使用==比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用==比较?应该怎样比较他们的值是否相等呢?
Answer:“==”是用于比较两个引用类型变量存放的地址是否相等。应该用equals的方法来比较两个对象的内容是否相等。
4. Wrapper(包装类)
4.1 Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?
Answer:100可以赋值给i是因为用了自动装箱的功能。Integer是int的包装类。
Integer x = 100; int y = x+1;x++; 这一串命令先自动装箱将100转化为Integer类,然后自动拆箱将Integer类型转换为int类型,x++先拆箱再装箱。
4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
Answer:java是一种面向对象的语言。要是没有包装类,那么基本数据类型怎么保存在集合中,就需要我们自己写一个类将数据做为这个类的成员变量封装起来,那也太太太太太繁琐了!!!包装类中的方法可给我们带来很多便捷啊!!!
5. 实验总结
5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:
- 两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。
- 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或 者查相关资料。
- 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。
并完成如下作业:
a. 描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。
b. 结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。`
结对编程,我想我是放弃了的-. -,因为我可能更喜欢自己编吧。和别人一起编还要讲出各自的想法,两个人难免有分歧。
既然事先没去刻意完成了,那平时在宿舍和舍友一起讨论题目也是可以写一点心得的,但是实施步骤就与上不同,流程为:一人写了一个功能如果wrong,另一个人去改正。之间相隔时间也不会距离太久,一般就是几分钟吧。然后就一个一个找错误。
按以上来说,舍友名字张凯艳,其实能够和舍友一起做出一道题还是很有成就感的,1+1>2的话,还是要因人而异和因题而异吧。在宿舍其实也经常和舍友一起做题,一起知道错误的点,然后避免了下次再犯,也算开拓了见识吧~。
5.2 5-1综合小测验
- 直接根据输入的功能,用switch case来进行选择,
if(str.equals("fib"))if(str.equals("sore"))if(str.equals("search"))if(str.equals("getBirthDat")),还使用了截取字符串str.substring(begin, end);
5.3 5-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
- 我是采用冒泡法来排序的,就是将出生年月截取出来后转为数组比较,,麻烦了点,但我没想出啥其他方法,降序的话,就比较的时候反一下就好了。具体见图:


5.4 5-4动态数组
- 输入的n是行数,但是每一列都不一样,就需要
str1[k] = new String [k + 1];来新建内存,最后采用Arrays.deepToString(str1)打印二维数组。
5.5 (重点:小测题目)5-8ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
这道题可以说是很烦了但是基本的使用方法都能在网上找到实例。
List strList = new ArrayList();实例化List集合
strList.add();添加元素到当前末尾;
strList.remove();删除一个元素
strList.set(index,sc.next());修改指定位置对象
strList.clear();清空str
等等。。。。。
5.6 选做:5-5(浮点数计算), 5-6(枚举), 5-7(大整数相加)
5-5(浮点数计算):这题主要就是一个
java.math.BigDecimal;的方法了,例如相加:a.add(b);相减:a.subtract(b);相乘:a.multiply(b);相除:divide(a,b,指定精度);。5-6(枚举):这题其实就没啥想说的了,我开始把枚举类型定义在Main里面,导致我Grade.class异常无比的长,后来我把它拿出来了,就可以通过了。
5-7(大整数相加):主要还是有
java.math.BigInteger;来进行字符串定义,!((str = sc.next()).indexOf("e")!=-1) && !(str.indexOf("E")!=-1)根据这句话来定义最后以E或e结尾。6. 选做:公交卡里应该还有多少钱?请分析原因

Answer: 欠费了欠费了,余额-0.2元。因为欠费了所以gg了哈哈哈哈哈哈才不是嘞
刚好以前在微博上看到过这个哈哈哈哈哈,看了一翻网友评论,大概是这样:4294967276 转成 16进制 是[FFFFFFEC],所以是-0.20,处理数据用了unsigned int无符号整型,数据单位是分,可能是因为没有考虑到负数的情况,也或许是因为卡片初始化错误。
3. 码云及PTA
3.1. 码云代码提交记录
- 在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图

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




3.3 使用老师发的jar程序统计每周的代码量
注意:请使用学姐更新的1.0版,使用新版前请先删除以前information.txt
第一次:

第二次:

第三次:

| 周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
|---|---|---|---|---|
| 2 | 515 | 0 | 10 | 0 |
201621123001 《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 ...
随机推荐
- 20165303 2017-2018-2 《Java程序设计》结对编程练习_四则运算
需求分析 能生成简单四则运算题目并判断用户回答对错. 能正确统计回答正确的概率. 能正确处理混合四则运算的优先级的问题. 能正确输出负数等结果. 能处理简单的加,减,乘,除运算. 能正确的处理有括号的 ...
- EntityFramework4.5使用Expression类创建动态查询及动态查询导航属性
创建动态查询 想在项目中实现一个灵活的动态查询类,参考http://www.cnblogs.com/lyj/archive/2008/03/25/1122157.html和http://www.cnb ...
- 关于JAVA项目中的常用的异常处理情况总结
1. JAVA异常处理 在面向过程式的编程语言中,我们可以通过返回值来确定方法是否正常执行.比如在一个c语言编写的程序中,如果方法正确的执行则返回1.错误则返回0.在vb或delphi开发的应用程序中 ...
- TP5中即点即改,json分页,单删
HTML页面: <!doctype html><html lang="en"><head> <meta charset="UTF ...
- Dynamic Shortest Path CodeForces - 843D (动态最短路)
大意: n结点有向有权图, m个操作, 增加若干边的权重或询问源点为1的单源最短路. 本题一个特殊点在于每次只增加边权, 并且边权增加值很小, 询问量也很小. 我们可以用johnson的思想, 转化为 ...
- http认证中的nonce与timestamp解释
Nonce是由服务器生成的一个随机数,在客户端第一次请求页面时将其发回客户端:客户端拿到这个Nonce,将其与用户密码串联在一起并进行非可逆加密(MD5.SHA1等等),然后将这个加密后的字符串和用户 ...
- CCF-CSP 201312-5 I'm stuck !
I'm stuck 试题编号: 201312-5 试题名称: I’m stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个R行C列的地图,地图的每一个方格可能 ...
- UI基础五:简单的OP组件POPUP搜索帮助
需求:给一个配置表,需要根据配置表来弹出选择框,并将选择的数据添加到SALES ORDER的项目 BSP_WD_CMPWB 新建组件:ZHSI_JPMPG 新建视图,适用VALUE NODE 参考表Z ...
- C# 3.0 / C# 3.5 扩展方法
概述 扩展方法是一种特殊的静态方法,可以像扩展类型上的实例方法一样进行调用,能向现有类型“添加”方法,而无须创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法的定义实现: public s ...
- python安装MySQLdb(即mysql-Python)模块的一些问题
1.超时问题 如果出现:ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed out ...