201621123001 《java程序设计》第2周学习总结

1. 本周学习总结

  1. 学会String 类的一些用法,比如用subString()截取字符串,频繁对字符串进行修改应使用StringBuilder()等。
  2. 学会Array 类的一些用法,比如sort()排序,deepToString()打印二维数组等。
  3. 学会调用函数。
  4. 了解了equals== 的区别.
  5. 学习了一种新的循环 foreach循环,格式为for(type element:arr)
  6. 了解了ArrayList动态数组的基本使用方法等。

2. 书面作业

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

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

Answer:【截图】201621123001 《java程序设计》第2周学习总结

  • String用char[]数组存储字符串,只是没有提供可以动态增加数组长度的能力。

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

Answer201621123001 《java程序设计》第2周学习总结
【作用】
201621123001 《java程序设计》第2周学习总结

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

Answer:【截图】201621123001 《java程序设计》第2周学习总结

  • 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)方法时,是如何实现添加字符的操作?

Answer201621123001 《java程序设计》第2周学习总结
201621123001 《java程序设计》第2周学习总结

  • 内部使用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是因为用了自动装箱的功能。Integerint的包装类。
Integer x = 100; int y = x+1;x++; 这一串命令先自动装箱将100转化为Integer类,然后自动拆箱将Integer类型转换为int类型,x++先拆箱再装箱。

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

Answer:java是一种面向对象的语言。要是没有包装类,那么基本数据类型怎么保存在集合中,就需要我们自己写一个类将数据做为这个类的成员变量封装起来,那也太太太太太繁琐了!!!包装类中的方法可给我们带来很多便捷啊!!!

5. 实验总结

5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:

  1. 两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。
  2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或 者查相关资料。
  3. 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方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?

  • 我是采用冒泡法来排序的,就是将出生年月截取出来后转为数组比较,,麻烦了点,但我没想出啥其他方法,降序的话,就比较的时候反一下就好了。具体见图:
    201621123001 《java程序设计》第2周学习总结
    201621123001 《java程序设计》第2周学习总结

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. 选做:公交卡里应该还有多少钱?请分析原因

    201621123001 《java程序设计》第2周学习总结

Answer: 欠费了欠费了,余额-0.2元。因为欠费了所以gg了哈哈哈哈哈哈才不是嘞

刚好以前在微博上看到过这个哈哈哈哈哈,看了一翻网友评论,大概是这样:4294967276 转成 16进制[FFFFFFEC],所以是-0.20,处理数据用了unsigned int无符号整型,数据单位是分,可能是因为没有考虑到负数的情况,也或许是因为卡片初始化错误。

3. 码云及PTA

3.1. 码云代码提交记录

  • 在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
    201621123001 《java程序设计》第2周学习总结

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

201621123001 《java程序设计》第2周学习总结
201621123001 《java程序设计》第2周学习总结
201621123001 《java程序设计》第2周学习总结
201621123001 《java程序设计》第2周学习总结

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

注意:请使用学姐更新的1.0版,使用新版前请先删除以前information.txt
第一次:
201621123001 《java程序设计》第2周学习总结
第二次:
201621123001 《java程序设计》第2周学习总结
第三次:
201621123001 《java程序设计》第2周学习总结

周次 总代码量 新增代码量 总文件数 新增文件数
2 515 0 10 0
上一篇:一个页面中使用多个UEditor


下一篇:pkuwc2018题解