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 ...
随机推荐
- LeetCode--387--字符串中的第一个唯一字符
问题描述: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = "leetcode" 返回 0. s = "lovel ...
- LeetCode--367--有效的完全平方数
问题描述: 给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False. 说明:不要使用任何内置的库函数,如 sqrt. 示例 1: 输入:16 输 ...
- win8.1安装密钥
https://zhidao.baidu.com/question/374064869043943484.html
- spring boot(九)定时任务
在我们的项目开发过程中,经常需要定时任务来帮助我们来做一些内容,springboot默认已经帮我们实行了,只需要添加相应的注解就可以实现 1.pom包配置 pom包里面只需要引入springboot ...
- VMware(虚拟机) 12版安装深度linux系统
需要的工具: 1.VM ware workstation12虚拟机(可自行百度下载) 参考:VMware Workstation 12.5.5 官方中文正式版,下载地址:http://www.epi ...
- SecureCRT自动记录日志
From: http://lzj0470.iteye.com/blog/1189368 今天在推特上看到有人谈起SecureCRT日志记录的问题,貌似很多人都有这习惯 我是开始工作后才使用Secure ...
- Homebrew 安装mysql
在mac上安装软件,无疑安装一个brew是个很好的选择,关于brew是什么,怎么安装建议去brew官网查看, 附上地址:brew官网 还有一篇博文 http://www.cnblogs.com/xd ...
- java正则表达式中的POSIX 字符类和Unicode 块和类别的类介绍
假如现在有一个需求,要你用Java语言来匹配出一个文本里面的所有(英文半角)标点符号,你会怎么写呢?我想大多数人应该是把这些符号都罗列出来, 如: !"#$%&'()*+,-./:; ...
- Git中ssh的使用
远程仓库前期工作(SSH HEY的使用) 1.1.注册GitHub账号 1.2.创建SSH Key 打开Git Bash后,输入ssh-keygen -t rsa -C "youremail ...
- 这些你都了解么------程序员"跳槽"法则
篇头语: “跳槽”这个词是从我报了"软件工程"这个专业后就已经开始听说的词了, 在大学中老师上课也会常说:“等你们参加工作以后,工资低不怕,没事就跳槽,之后工资就高了”: 我相信听 ...