201621123086《Java程序设计》第二周学习总结

本周学习总结

  • 关键词:
    包装类、自动装/拆箱、常量池、关键字new、String对象、字符串常量
  • 联系:
  1. 每一个基本数据类型都有其对应包装类,如int 对应Integer。他们之间的转换叫做自动拆/装箱。
  2. 常量池保存在编译时确定的常量,其中包括字符串常量。字符串常量声明方式如: String str1="111"; ,且一旦被声明就不可被更改。
  3. new关键字则不同,如:String str2=new String("222"); 是创建了一个引用
  4. str1与str2不同
  5. 正如第二点所说,字符串常量不可更改,如果直接用‘+’号连接,则为创建一个新字符串,故一般用StringBuilder类来更改字符串。

书面作业

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

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

1122312-20170923163646478-2026273862.png

  • 通过查阅网上资料,我了解到String 作为引用存放在栈中,例如:“str”存放在栈中。
  • 而其引用的对象则分为两部分,一部分作为常量存在常量池中,例如:String str1="111";中的"111"
  • 另一部分存在堆中,例如String str2=new String("222"); 中的"222"

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

输入字符数组,返回String对象。

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

1122312-20170923164948946-1430023885.png
可以看到此函数中,新建了一个buf字符数组,在函数结束时返回了buf字符数组的String对象,而原String对象并未改变

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

  • String最底层是用字符数组实现的,所以字符数组更为灵活
  • String作为封装好的类,拥有许多函数可以更简便的对String操作
  • String存在的意义在于让人们更便捷的对一段字符串进行操作

2. StringBuilder

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

    因为Stirng对象是不可改变的,所以进行大量修改的时候就会产生大量不需要的字符串常量存在内存中
    例如题中:

1122312-20170923170648525-134748003.png
此时需要用StringBuilder,StringBuilder对象为动态对象,更改时不需要生成大量常量,而是可以直接在对象上修改,所以应选用StringBuilder而非String。

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

1122312-20170923171732587-47481406.png
功能:将字符数组以字符串的形式连接到原有字符串后面
内部采用字符数组形式来存放字符
StringBuilder对象为动态对象
1122312-20170923172159634-1831829263.png

3. 字符串与字符串池

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

String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);

    结果输出为true
    因为str1在字符串常量池中创建了常量:"hi",在第二句执行时,则先对字符串进行了查找,并且在其中找到了同一个常量,所以并未进行新创建。
    而第三句则在堆中创建了一个新对象,这个对象等同于str1.
    所以总共创建了三个对象。

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

    因为对于引用类型,==比较的是他们的引用对象
    例如:一个字符串用str = "";创建,而另一个用new关键字创建,则两者引用不同,所以即使他们内容相同,==返回的也只是false
    采用equals()函数则不会出现这种情况,因为equal比较的是他们的引用。

4. Wrapper(包装类)

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

  • 因为其中包含了自动拆装箱的操作
  • Integer x = 100;包含自动装箱操作
  • int y = x+1;自动拆箱
  • x++;自动拆箱→自动装箱

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

    包装类整合了基本数据类型与诸多功能函数,为我们对基本数据类型的操作提供了极大便利,需要做什么操作时只需要调出函数即可完成。

5. 实验总结

5.1 结对编程实践:

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

1122312-20170924175659525-1708702648.jpg

队友姓名:雷江南
通过此次结对编程,我发现了与另一个人一起编程不仅能够对于自己不会的知识予以补充,还能使自己开拓思路,了解到那些对于同一道题与自己不同的想法。

5.2 PTA-1综合小测验

1. fib函数编写采用传统方法
2. 通过参考老师发出的代码,学会用.splite来转换为数组的方法。随后用sort函数排序,将结果转换为string形式输出。
3. 运用binarysearch函数搜索
4. 此处结果正确,但PTA无法通过

1122312-20170923193241915-78133618.png
1122312-20170923193512868-1490882527.png

5.3 PTA-3身份证排序。

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

1.sort1函数通过Arrays.sort将截取好的出生日期字符串数组排序,而后输出
2.通过判断是否身份证部分数组与相等排序号的出生日期相等,若相等则输出,最终输出排序号的身份证号
3.可以对其进行冒泡排序或选择排序等基础排序方法

5.4 PTA-4动态数组

考察二位数组,用for循环完成
学会了使用.deepToString函数,次函数的作用在于将所有字符串,包括内嵌字符串都打印出来

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

 ArrayList为动态数组
易于改变大小、长度、元素
更为灵活

5.5 选做:5-5(浮点数计算)

1122312-20170923214515196-1795821461.png
1122312-20170923215158525-1793149024.png

BigDecimal c = new BigDecimal(Double.toString(a));
System.out.println(c.add(d).doubleValue());
应用两个函数进行精确计算,但结果如上图,正确结果为4.00,然而如图出现错误答案4.0,错误未知

公交卡里应该还有多少钱?请分析原因

1122312-20170923175608743-1762541929.png
1122312-20170923180412556-300134625.png

可以看到和unsigned int范围很相像,两者相差19,所以原因可能是数字溢出。
个人猜测结果可能是-0.2或-0.19或-19或-20?

码云及PTA

3.1. 码云代码提交记录

1122312-20170923210952368-1691786422.png

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

1122312-20170923205025040-1188173310.png
1122312-20170923205156790-486826831.png

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

行数新增行数文件数新增文件数
4054054646

转载于:https://www.cnblogs.com/piraat/p/7581889.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值