20162320刘先润第4周学习总结

学号 20162320刘先润《程序设计与数据结构》第4周学习总结

教材学习内容总结

  • 布尔达表达式,是一个用来判定取值为真或为假的条件。
  • 两种运算符,在if语句中表示两个变量的关系,分为关系运算符和逻辑运算符。
运算符 含义
== 等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
运算符 描述 示例 结果
逻辑非 !a 如果a为假,则结果为真;如果a为真,则结果为假
&& 逻辑与 a && b 如果a和b都为真,则结果为真;否则为假
|| 逻辑或 a&#124|b; 如果a或b两者都为真,则结果为真;否则为真
  • if条件语句,在后面的括号内给定条件并判断是否执行赋值语句。if-else语句则是根据条件的真假判断执行哪一条赋值语句。
  • 数据比较,浮点数比较计算差值的绝对值再比较公差,字符比较则是判定顺序关系,对象比较则是使用int result = name1.compareTo(name2);根据result的正负性判定。
  • switch语句,switch即为选择,在switch后按照顺序执行语句,若处理过程中匹配到了表达式的值,则根据有无break来结束。
  • while语句,是loop语句,while会根据条件重复地执行相同的语句,直到条件变假
  • 迭代器,是一个对象,可以按项处理元素,还可以处理并打印URL的每个部分。
  • do语句,是一种loop语句,与while不同在于do实在执行之后计算条件的值,所以在程序中do后面是不加括号的,而且do语句需要while来停止
  • for语句,for语句循环的方式是从左至右的,分初始化⇒布尔表达式⇒增量三个过程。
  • 数组元素,每个元素保存在数组确定且有标记的地方。(注:从0开始编号)
  • 对象数组,用数组来保存对对象的引用。
  • 数组的定义方法,分为静态定义法,例如int arr [] = {9,5,3,7,1}(注:中括号位置不固定),动态定义法int arr [] = new int[10](表示声明了十个数值)。若数组为二维数组,int arr [][]= {{1,2,3},{4,5,6},{7,8,9}};int arr [][] new int[3][3];

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

  • 1.问题:在使用if else语句做实验时,为什么在else后面的第二个语句在非else情况下也能执行。
    解决方案:通过做不同的if else实验时发现问题出在块语句的理解上,只有第一个语句才能作为else子句的内容,所以要用{}来限定范围。
  • 2.问题:关于default的理解,教材上说如果没有default部分,switch语句就不会执行任何语句,而继续执行switch之后的语句,无法理解。
    解决方案:编写程序加结合示例发现,default是在与前面所以的分支语句都无法匹配时执行。例如假设范围为1-10,前面有三个语句分别代表1-2,2-3,3-5,当无法匹配时,执行default:后面的内容,相当于deafult以一种形式补全了剩余的5-10的范围,防止运行错误。
  • 3.问题:关于String another = "y"; while (another.equalsIgnoreCasr("y")),这句话通常应用于程序中询问用户是否继续执行,这种方法在教材中通常提示输入n来否定,其实我只要输入非y字符就能返回假,这算不算教材上的程序设计的小失误呢?
  • 4.问题:import java.io.*;import java.util.*的区别,这两个不都是导入这个包下的所有类库吗?
    解决方案:我的理解是导入了不同的东西,前者是文件、数据流输入输出相关,后者是基础类(并不一定正确)。

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

  • 1.问题:为什么在前一个不加break的语句后不比较"case c"而直接执行这个语句呢,按理说打印出来应该只是"a"才对啊?
    解决方案:教材上的解答是如果没有break语句,继续执行switch之后的语句。并未给出详细原因,暂且当成一条没有break后不比较直接执行的定义来牢记吧。
  • 2.问题:在program4.10中do后面循环的计算中number是整数型,number = number/10;有些数执行后number不就变成小数型了吗?
    解决方案:通过赋各种值发现当number/10成为小数时则强制整数,即为去掉点后的部分,但并非四舍五入,比如1.6就取为1,0.9取为0。
  • 3.问题:

这上面int:value实在是看不懂是什么意思,我觉得跳跃学习漏学了知识点。
解决方案:通过结合后面的实例反复理解,相当于让value等于list,使后面的打印出对应的数组list内容。

  • 4.问题:

代码托管

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

结对及互评

评分标准(满分10分)

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分

6 其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分

7 扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分

点评模板:

  • 基于评分标准,我给本博客打分:(0-10)。得分情况如下:xxx

  • 参考示例

点评过的同学博客和代码

上周考试错题总结

  • 错题1:使用JDB进行调试时查看源代码的命令是(list)。错因:没有去看这个知识点,每次对这种偏概念性质的题我都很难做对,基本功不太好。
  • 错题2:10&9 的结果是(8)。错因:此题和上周的接近相同,我就直接背了个答案。解法:10转化为二进制是00001010,9转化为二进制是00001001,&符号是位与运算符号,0&1是0,0&0是0,1&1是1,所以为00001000,转化为十进制为8。
  • 错题3:Java程序中使用java.lang包中的类,应该使用import java.lang.来导入。(X)错因:把当成可以使用任何库类的符号后就以偏概全。java.lang包中的类会自动引入,因为他们可以看成是语言的基本扩展部分,因为java.lang包中的任何类在未使用import声明时也可以使用,就好像所以的程序文件中自动包含了import java.lang.*这个声明。
  • 错题4:Java中生成对象必须使用new关键字。 分析:使用new运算符创建对象的过程为初始化,对象称为类的实例,可以使用new来实例化一个对象。
  • 错题5:使用JDB进行调试时单步执行命令有step和next,我们优先使用(next)。 分析:调试时遇到方法调用,我们先看调用结果对不对,结果正确,说明方法没有问题,就不用进入方法体了; 方法调用结果不对,我们才需要进入方法体进行调试。单步跟踪命令next和step在执行一般语句时没有区别,在执行有方法调用的语句时,next会把方法执行完,step
    会进入方法体。所以在调试时,单步执行我们要优先使用next,这样效率比较高。

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

说实话,这周的任务实在是太重了,每天把空闲时间都花在攻克这两章的知识上,还熬夜。对于我们没学过计算机导论的3班来说初次学习生知识会很佶屈聱牙,也许其他同学的感受不尽相同,但我往往在一个难知识点上画上很多时间。看着开学时制定的每天多余的学习任务表往往是心有余而力不足,希望老师能够适当减少些学习任务。虽然我知道这个要求并不很合理,但这是我内心最真实的感受。我的高中老师经常给我说“不要问为什么,要多问凭什么”,这句话我当时觉得很好笑,但是在高三下期我却不自觉的以这句审视自己,“你凭什么不能提高成绩,你凭什么不能学好。”也是这种精神让我成绩突飞猛进,更是有了一种血性和拼劲,所以我并不介意学习任务的多少,因为我可以做出调整。“我凭什么不能学好这门课?”也是我一直在反省的内容。管理学的老师讲过一个道理,老板在适当给出大于工人平均工作任务的任务后,工人的效率会显著提高。但是在老板给出明显超过工人能力的任务后,工人的效率不仅没有提高,反而急剧下降,并且工人也是哀声怨气。我真的想学好java,只是最近一周各种不可预料的事宜让我很累,还有上课时以一些比如考试排名不变,各种加分政策的形式激励,同学之间明争暗斗的刺激氛围下让我情绪很紧张,压力很大,说实话高三最后时刻拼搏时也没有天天学到12点半甚至1点,这是健康的大学生活吗?望老师多多理解。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 180/180 1/4 15/15
第二周 465/645 1/5 18/33 学习了scanner
第三周 456/1101 1/6 17/ 50 学会了如何编写数学公式等
第四周 620/1734 2/8 40/90 学了条件循环和数组
第五周 0/0 1/9 0/0

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

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

  • 计划学习时间:25小时

  • 实际学习时间:40小时

  • 精髓时间:5小时

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

参考资料

posted @ 2017-03-24 11:53  润润大魔王  阅读(275)  评论(4编辑  收藏  举报