20162301 张师瑜《程序设计与数据结构》第四周学习总结

时间:2022-01-28 12:21:23

20162301 2016-2017-2 《程序设计与数据结构》第四周学习总结

教材学习内容总结

  • 1.布尔表达式,也称为条件。(相等及关系运算符,逻辑运算符)
  • 2.if语句(if语句,if-else语句,使用块语句,条件运算符,嵌套的if语句)
  • 3.数据比较(浮点数比较字符比较,对象比较)
  • 4.switch语句(default,break)
  • 5.while语句(while语句重复地执行相同地语句,直到它地条件为假为止)(无限循环,嵌套的循环,回文)
  • 6.迭代器
  • 7.do语句(至少执行一次循环体)
  • 8.for语句(for(初始化;表达式;增量))
  • 9.数组元素
  • 10.数组的声明及使用(边界检查,两组数组的语法,初值表,数组作为参数)
  • 11.对象数组
  • 12.命令行参数
  • 13.变长参数表
  • 14.二维数组(int[])

教材学习中的问题和解决过程

  • 问题1:P76中写道“为了判定两个字符串的关系,可以使用String类中的compareTo方法”,不明白如何具体使用compareTo来判断。
  • 解决方法:String类中的compareTo方法总结public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的Unicode值。按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0。如果这两个字符串不同,那么它们要么在某个索引处的字符不同(该索引对二者均为有效索引),要么长度不同,或者同时具备这两种情况。如果它们在一个或多个索引位置上的字符不同,假设k是这类索引的最小值;则在位置 k上具有较小值的那个字符串(使用 < 运算符确定),其字典顺序在其他字符串之前。在这种情况下,compareTo 返回这两个字符串在位置 k 处两个char 值的差,即值:this.charAt(k)-anotherString.charAt(k)。如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo返回这两个字符串长度的差,即值:this.length()-anotherString.length()

  • 问题2:书本程序4.12使用了嵌套的for循环,我在敲代码的时候,认为只需要一个for就可以得出相同的结果了,于是删除了最后一个for结果为一排10个星号(*)
    20162301 张师瑜《程序设计与数据结构》第四周学习总结

  • 解决方法:重新理解for循环的意义,发现如果删除后一个for不会进行行数的变化,只会在同一行不断地加上星号直至10个为止。这个问题也是在实践中得到了解答(做中学)。

  • 问题3:程序7.3中用布尔表达式(current >= 'A' && current <= 'Z')来判断字符是否是大写字母。在写这个程序的时候,没有明白这个表达式的原因
  • 解答方法:在学习第7章的时候,已经忘记了第4章刚刚学到的内容。书本P76写道“Unicode字符集是这样规定的:所有小写字母('a' ~ 'z')都以字母序连续存放。大写字母('A'~'Z')和表示数字('0'~'9')的字符也同样的处理。数字在大写字母前,大写字母在小写字母前。”在Unicode字符集中每个字符都有一个对应的数值及次序,所以在这个程序中的这个布尔表达式用到了这个知识。

  • 问题4:同样是书本程序7.3中char current;中的char定义时与String的区别是什么?
  • 解决方法:上网查询得出结论:char定义时用单引号,只能有一个字母,数字。char c='c';
    而String用双引号,可以是一个,也可能是多个字母,汉字等。就是所谓的字符串。

  • 问题5:书本P210程序7.4中写道for (int prime :primeNums)这样结构的for的使用没有接触过。
    20162301 张师瑜《程序设计与数据结构》第四周学习总结

  • 解决方法:java for 的几种用法这篇博客中详细的写了for的用法。第二种for循环:for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体
    /* 建立一个数组 */ int[] integers = {1, 2, 3, 4}; /* 开始遍历 */ for (int i : integers) { System.out.println(i);/* 依次输出“1”、“2”、“3”、“4” */ }

    代码调试中的问题和解决过程

  • 问题1:在敲写书上程序7.5的时候,敲完后没有错误,但是没有办法编译运行

    20162301 张师瑜《程序设计与数据结构》第四周学习总结
    20162301 张师瑜《程序设计与数据结构》第四周学习总结

  • 解决方案:上答疑论坛上提问,马平川同学回答了我的问题关于书本程序7.5的问题
    具体操作是:因为GradeRange.java中引用了Grade.java中的Grade类,所以先完成7.6,不用运行
    在程序7.5所在的目录中输入javac GradeRange.java(不加d)
    然后java GradeRange就可以运行程序7.5,但是为什么在所在目录中编译,而不是往常在bin中这个问题的原因我还没有找到。
  • 问题2:关于书本7.8的错误
    20162301 张师瑜《程序设计与数据结构》第四周学习总结

  • 解决方案:书本上程序7.8中有一句句末少了分号,马平川同学在英文版书中发现,确实在中文版纸质书上漏印了一个分号。(我很钦佩这个队友......)

  • 问题3:在编译PP4.8的时候,提示错误

    20162301 张师瑜《程序设计与数据结构》第四周学习总结
    20162301 张师瑜《程序设计与数据结构》第四周学习总结

  • 程序名字中应用"_"而不是"-",和给我的提示没有关系,我也不知道为什么......

代码托管

  • 代码提交过程截图:
    20162301 张师瑜《程序设计与数据结构》第四周学习总结

  • 代码量截图:
    20162301 张师瑜《程序设计与数据结构》第四周学习总结

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 错题1: 填空:使用JDB进行调试时单步执行命令有step和next,我们优先使用(next)。
  • 原因:娄老师所写的使用JDB调试Java程序中写到“单步跟踪命令next和step在执行一般语句时没有区别,在执行有方法调用的语句时,next会把方法执行完,step会进入方法体。所以在调试时,单步执行我们要优先使用next,这样效率比较高。”没有仔细复习老师给的资料,正在逐渐跟上节奏。

  • 错题2:填空:使用JDB进行调试时查看源代码的命令是(list)。
  • 原因:同样出自上一个问题中的博客,“可以使用list来查看运行到了源代码的什么位置”

  • 错题3:填空:”Hello”.substring( 0,2 )的值是“He”
  • 原因:String substring (int offset, int endIndex)返回该字符串中从offset开始,一直到endIndex -1结束的子串。做题的时候忘记了-1。

  • 错题4:填空:调用nextInt产生-10至15间的整数随机数(new Random().nextInt(26)-10)
  • 原因:这道题有点遗憾,刚交上去的时候意识到了我写错了……说明没有掌握好。如果没有最后的-10,那么结果是0到25,最后加上-10,结果变为-10至15。

  • 错题5:DRY是(Don’t Repeat Yourself)的缩写
  • 原因:DRY(Don'tRepeatYourself )原则

  • 错题6:判断:Integer a = new Integer(10); Integer b = new Integer(10); System.out.println(a==b)的结果是true. (X)
  • 原因:这题也是很粗心的错了。书本上P46说明的很详细了,考试的时候却忽略了。变量Integer a和 Integer b指向内存中的不同地址。(如果换为对象声明,即String Integer a = new Integer(10); String Integer b = new Integer(10),那么结果是正确的。对象变量保存的是对象的地址,两者保存的是相同的地址,所以System.out.println(a==b)的结果是true.)

  • 错题7:填空:Java中类方法使用(static)关键字声明。
  • 原因:知识上的漏洞。

结对及互评

其实每周我都会看所有同学写的博客,记得前几周看见马平川同学的博客,我都是属于完全看不懂的状态。(所以希望自己要好好学习,不要拉后腿)既然我看不懂他的博客,那我就学习他给我的建议吧。上周给我的建议是“这周可以看一下类的toString()方法和迭代器”。1.“public String toString()”返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。2.Java学习之Iterator(迭代器)的一般用法

其他(感悟、思考等,可选)

这周学习任务特别特别重,前几周每周一章的任务都感觉没有学透,这周开始每周学习两周,这也促使了我不把所有的学习放到周五开始。在这周的学习过程中还是绝望与希望并存的。内容虽然繁多且不好理解,但是也在有限时间内学习到了更多的知识。其实在这一段时间,对于java的学习,我一直感觉很累。虽然有的时候觉得自己已经复习的比较充分了,但是最近两次测验的结果也并不理想。而且在学习后的动手实践过程中,也暴露出来我的实践能力比较弱。这周开始,要加大提高自己的学习效率,先看书本后敲代码,也要在课程学习中学会取舍,将更多的精力放到这门重要的专业课上。

做努力爬行的蜗牛或者坚持飞翔的笨鸟,在最平凡的生活里,谦卑并且认真地活着。
20162301 张师瑜《程序设计与数据结构》第四周学习总结

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 57/57 1/1 24/24
第二周 338/395 1/2 18/42
第三周 497/892 1/3 18/60
第四周 839/1731 1/4 30/90

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:25小时

  • 实际学习时间:30小时

  • 改进情况:提高自己的学习效率,脚踏实地的学习

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料