20172330 2017-2018-1 《Java程序设计》第九周学习总结

时间:2023-02-21 22:16:27

20172330 2017-2018-1 《程序设计与数据结构》第九周学习总结

教材学习内容总结

本周的学习包括两章内容,分别为异常和递归。

异常

  • 错误和异常都是对象,代表非正常情况或者无效处理。
  • 异常抛出时所输出的信息,提供了方法调用堆栈踪迹。
  • 每一个catch子句处理一种try语句块中抛出的异常。
  • 无论try语句块正常退出还是又是抛出异常而退出,都将执行finally子句。
    https://www.ibm.com/developerworks/cn/java/j-lo-finally/index.html
  • 如果在一个机场的发生处没有捕获和处理该异常,则该异常将传递给上级调用方法。
  • 程序员应该细心地考虑处理异常的时机和位置,否则最好不要做异常处理。
  • 可由Exception类或他的后代类派生一个新类来定义一个新的异常。
  • 流是一个有序的字节序列,它可以以用作输入源或作为输出目标。

递归

  • 递归是一种方法能够调用自己的编程技术,掌握递归编程的关键是能以递归的思想考虑问题。
  • 任何一个递归定义中必须称为基本情况的非递归定义部分,才能使递归最终结束。
  • 每一次对方法的递归调用,都会创建新的局部变量与参数。
  • 详细的跟踪递归处理过程,可以深入剖析递归问题求解问题的方式。
  • 汉诺塔解法具有指数复杂性,效率非常低,但是该接发的实现却出奇的简短和精炼。

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

  • 问题1:IO的理解。
  • 问题1解决方案:如书上所说,Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
    下附Java中IO流的所有类
    20172330 2017-2018-1 《Java程序设计》第九周学习总结
    IO流还有许多东西需要去慢慢学习,对于很多方面都有概括的。
  • 《Java中IO总结》

  • 问题2: 递归与迭代的比较
  • 问题2解决方案:对于某些问题,递归是最精炼和适当的解法,但对于其他的问题,递归则不如迭代解法直观。
    递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出.

    //这是递归  
    int funcA(int n)  
    {  
    if(n > 1)  
       return n+funcA(n-1);  
    else   
       return 1;  
    }  
    //这是迭代  
    int funcB(int n)  
    {  
    int i,s=0;  
    for(i=1;i<n;i++)  
       s+=i;  
    return s;  
    }  

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

  • 问题1:在做pp11.1的时候,无论我输入多长的字符串他都显示超过
  • 问题1解决方案:当时反复检查代码觉得并没有问题啊,然后使用了代码调试一步步进行下去发现由于在if语句后加了一个;,导致throw语句一直能够进行,所以才会一直出现显示超出的提示。
    20172330 2017-2018-1 《Java程序设计》第九周学习总结
    20172330 2017-2018-1 《Java程序设计》第九周学习总结

代码托管

20172330 2017-2018-1 《Java程序设计》第九周学习总结

上周考试错题总结

  • 问题1:We compare sorting algorithms by examining
    A the number of instructions executed by the sorting algorithm
    B the number of instructions in the algorithm itself (its length)
    C the types of loops used in the sorting algorithm
    D the amount of memory space required by the algorithm
    E whether the resulting array is completely sorted or only partially sorted
    分析:这道题考到的知识点为:不同的排序算法在执行时需要不同数量的指令。所以我们通过检查排序算法执行的指令数,来比较排序算法。所以应该选a。

  • 问题2:Polymorphism is achieved by
    A . overloading(重载)
    B . overriding(重写)
    C . embedding(嵌入)
    D . abstraction(抽象)
    E . encapsulation(封装)
    分析:这道题考查的是多态性是通过什么实现,我选择的是的抽象,而答案是b重写:重写提供了多态性,因为适当的方法是根据当前被引用的对象而调用的,所以应该是重写实现多态性。

    结对及互评

点评模板:

  • 博客中值得学习的或问题:
    • 严域俊同学在进行异常和错误的区别时进行了详细的描述并配了图
    • 同时在根据自己代码中出现的问题又一次进行了查询和解答。
  • 代码中值得学习的或问题:
    • 这周我两就四则运算的最后结合部分进行了修改,但还是存在很多问题,我两也在不断地学习与探索过程中学到了很多,也希望能够按时完成四则运算吧。
    • commit依旧很详细,有条理性。

点评过的同学博客和代码

  • 本周结对学习情况
    • 20172333
    • 结对学习内容
      • 学习第十一和十二章pp项目。
      • 学习异常和递归的具体内容
      • 对于IO操作的共同探讨
      • 继续完善四则运算的的项目。

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

这一周在做课后项目时问题不大,但是在做是四则运算的编写时遇到了很多问题,需要继续努力研究。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 180/180 2/2 20/25
第二周 312/414 2/4 20/45
第三周 557/971 1/5 25/70
第四周 1217/2242 2/7 44/114
第五周 734/2976 1/8 24/138
第六周 523/3509 1/9 20/158
第七周 697/4206 1/10 24/182
第八周 1118/5324 3/13 30/212
第九周 656/5980 2/15 20/232

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

  • 计划学习时间:20小时

  • 实际学习时间:20小时

  • 改进情况:

这周对于课后练习做的没有那么吃力,但还是存在一些对于类的编写的问题,希望继续加油。

参考资料