20172308《程序设计与数据结构》第九周学习总结

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

教材学习内容总结

1.第十一章 异常

1.什么是异常:非正常情况或错误的对象,由程序或运行时环境抛出,可根据需要进行捕获处理
2.错误:类似异常,但不可恢复且必须捕获处理
3.try-catch:用于捕获可能出现的异常语句块;try可关联多个catch,catch为异常处理器,用于匹配可能的异常
4.finally子句:保证一定执行某段代码(可以不写)
5.为什么要捕获异常:没有捕获的异常会使程序非正常中止,捕获异常可是程序跳过可能异常语句,继续运行程序
6.异常传递:此级没有捕获异常,会返回向上一级的调用方法,直到被捕获。
7.自定义异常:从Exception类或其后代类中派生的,选择一个作为父类,新异常由所代表的问题和条件决定
8.I/O异常:

2.第十二章 递归

1.自我理解:一种不是循环的循环
2.应用:迷宫,汉诺塔问题

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

  • 问题1:书上的重点概念“异常抛出时所输出的信息,提供了方法调用堆栈踪迹”,然而我并不知道什么是堆栈踪迹。。。
  • 问题1解决过程:竟然百度不到概念。。。综合理解一下,大概是异常抛出时,IDEA提示错误的那几行红字:指明异常发生在何处

【参考资料】:
辛勤的代码工
既然选择了远方 便只顾风雨兼程

  • 问题2:无意中看到一个问题:“是否可以在一个catch代码块里捕获多个异常”,答案是可以的,那如果是这样,还写那么多句catch干嘛,都写一个里面不就好了?
  • 问题2解决过程:嗯,这是Java本身的升级,在Java7里,catch代码块得到了升级,用以在单个catch块中处理多个异常。如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度

【参考资料】:
JAVA 7新特性-在单个catch代码块中捕获多个异常
风一样的码农

  • 问题3:因为在写习题PP12.1的时候,用递归出了一点问题(已经记录在博客里面),结合书上的自测题,了解一下“什么时候应避免使用递归”以及“递归与循环的比较”
  • 问题3解决过程:
    1.递归与循环是两种不同的解决问题的典型思路。
    2.递归算法:
    优点:代码简洁、清晰,并且容易验证正确性。
    缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理,比如参数传递需要压栈等操作,会对执行效率有一定影响。
    3.循环算法:
    优点:速度快,结构简单。
    缺点:并不能解决所有的问题。
    4.当使用迭代法更简单时,避免使用递归,以避免多次调用方法的开销

【参考资料】:
ggxxkkll的专栏
递归这东西是不是尽量避免使用?
百度知道
何时使用递归

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

  • 问题1:PP11.1。我总是觉得书上的问题表述不是很清楚:比如,“在程序的main方法中读取输入的字符串,直到输入“DONE”为止。如果输入的字符串多于20个字符,则抛出异常”。总觉得不是很理解意思:是要输入一长串的字符串,读到DONE就停止读入,然后计算字符串是否超过20个吗?还是要多次输入字符串,直到输入DONE为止,然后累计输入的字符个数是否多余20个;
  • 问题1解决过程:
    综合以上想法,大概是要多次输入,判断每一次输入的字符串是否超过20个。
    1.代码调试过程中发现的第一个问题:在用到字符串判断是否相等的时候,只能用方法. equals才能判断,用“ == 或者 != ”则不行。
    2.题目只要求判断每次输入的字符串是否超过20个,并未要求存储字符串,而我画蛇添足地加了上去,反而导致不能输入任意次了(因为数组需要提前申请内存),现已改正。
    3.结合PP11.2,要求的是捕获异常,并输出一条适当信息并继续处理后面的字符串,代码如图:

    我输出的结果是:当输入的字符串字符数超过20个时,会输出一条信息,包含异常的字符串,并继续输入直到DONE。
    这里遇到的问题是写好了上图中的try-catch语句之后,总是会标红说try语句里的异常不存在,一头雾水,反复对照书上的代码,并未发现错误。后来操作了几个地方,但是无关痛痒,又尝试运行了一次,竟然成功了。最后得出的结论是IDEA没有及时去掉标红吧。
  • 问题2:PP12.1。按道理来说,这道题应该很简单,我写的代码应该是对的,代码如图:

    如图,我输入了“wew”,这是一个回文,但运行出现了问题,提示是递归的方法有问题
  • 问题2解决方案:首先要解释一下代码。我的递归方法,用了两个参数n,m。n为0,代表字符串的索引值为0处的字符;m为最后一位的字符索引值。这样在递归方法里只要比较一下n和m处的字符是否相等就OK了,然后将n+1,m-1,继续比较,层层递归,直到不一样的地方输出不是回文,否则的话到n>m的时候直接输出是回文即达到判断要求。
    然后这里有一个问题是:递归的方法里需要提前定义字符串,才能继续比较。但是这个字符串是要用户输入的,而如果在递归方法里写用户交互的方法的话,会导致每一次调用递归方法的时候都要再输一次字符串。如图:

    但是递归方法与main方法里的字符串还是不能互通,虽然把递归方法写成一个类,然后再继承它应该可以解决,但是我不大想这样做,总觉得很麻烦。
    后来,在main方法外面声明了一个str变量,在main和递归方法里都能调用,如图:

    这样算是解决了问题。
    还有就是那个getstr的方法,并没有用到,我一开始以为还要在递归方法里get一下才能得到那个输入的字符串,现已删掉。

代码托管

上周考试错题总结

  • 错题1:
  • 错题1解析:没有关联捕获语句的try语句中没有代码,即引用某个未知的类,使用一个参数,或者处理新内存的生成,将抛出NullPointerException
  • 错题2:
  • 错题2解析:这两个异常都是RuntimeException的子元素,它本身就是异常的子元素,书上有写到,是我看的不够仔细
  • 错题3:
  • 错题3解析:书上原话:“Java中唯一的不可检测异常是RuntimeException类的对象或该类的后代类对象。”运行时异常不被检查异常。
  • 错题4:
  • 错题4解析:如果一个异常的发生处没有捕获和处理该异常,控制将立即返回到产生该异常的方法的上一级调用方法,如果仍未捕获将继续向上一级传递,直到异常被捕获。
  • 错题5:
  • 错题5解析:这题是蒙的,真的不会。照着机翻的理解一下:扫描器类通过拥有自己的catch (IOException…)catch语句,导致一个IOException的扫描器类中的任何代码都被扫描器类捕获,这样可能使用扫描器类的类就不必处理这个被检查的异常。
  • 错题6:
  • 错题6解析:这个书上真没有,百度到的东西一大堆,并没有过多的涉及到本题选项所说的东西:PrintWriter类是一个Writer类,而PrintStream类是一个流类。主要的区别是PrintWriter是专门为文件而设计的,因此有错误检查机制,而不是PrintStream的一部分。
  • 错题7:
  • 错题7解析:我明明记得曾经在哪里看到过try语句可以不用catch的,但是现在找不到了。。。当时我还以为这题绝对会对的

结对及互评

  • 博客中值得学习的或问题:

    • 侯泽洋同学的博客排版工整,界面很美观
    • 问题总结做得很全面
    • 对于书上的疑惑总会想办法解决它,这种探索的精神值得我去学习
  • 代码中值得学习的或问题:
    • 对于编程的编写总能找到角度去解决
  • 本周结对学习情况
    • 20172302
    • 结对学习内容
      • 第十一章内容:异常
      • 第十二章内容:递归

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 309/309 1/1 20/20
第二周 269/578 1/2 18/38
第三周 236/776 1/3 22/60
第四周 507/1283 2/5 30/90
第五周 631/1914 1/6 30/120
第六周 529/2443 1/7 25/145
第七周 515/2958 1/8 25/170
第八周 1128/4086 2/10 50/220
第八周 1241/5327 1/11 15/235

参考资料

原文地址:https://www.cnblogs.com/zhouyajie/p/9028926.html

时间: 2024-10-11 01:17:49

20172308《程序设计与数据结构》第九周学习总结的相关文章

马凯军201771010116《面向对象与程序设计Java》第九周学习总结

一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3.程序中出现的常见的错误和问题有:用户输入错误.设备错误.物理限制.代码错误. 4.Java把程序运行时可能遇到的错误分为两类: (1)非致命异常:通过某种修正后程序还能继续执行.这类错误叫作异常.如:文件不存在.无效的数组下标.空引用.网络断开.打印机脱机.磁盘满等. Java中提供了一种独特的处

《JAVA程序设计》_第九周学习总结

一.学习内容 1.数据库的建立.配置 在官网先下载好MySQL.navicat for MySQL.XAMPP.MySQL-connecter 在XAMPP中点击start开启MySQL 在navicat for MySQL中点击连接,输入信息后确定 在连接名处右击,创建新数据库,输入数据库名,字符集和校对均选择gb2312... 在表处右击,输入表的信息 点开创建的mess表输入信息,按tab键可快速换行 将MySQL-connecter添加到IDEA的module中 输入以下代码,检测数据库

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

2017-2018-20172309 <程序设计与数据结构>第九周学习总结 一.教材学习内容总结 一些概念: 图: 是一种复杂的非线性数据结构. 图的二元组定义: 图 G 由两个集合 V 和 E 组成,记为: G=(V, E) 其中: V 是顶点的有穷非空集合, E 是 V 中顶点偶对(称为边)的有穷集. 通常,也将图 G 的顶点集和边集分别记为 V(G) 和 E(G) . E(G) 可以是空集.若 E(G) 为空,则图 G 只有顶点而没有边. 有向图: 若图 G中的每条边都是有方向的,则称

学号20172328《程序设计与数据结构》第九周学习总结

学号20172328<程序设计与数据结构>第九周学习总结 教材学习内容总结(异常和递归) 第11章:异常 1.[异常处理]: 一个异常:是一个定义非正式情况或错误的对象,由程序或者运行时环境抛出,可以根据需要捕获和处理. 错误:错误类似于异常,但是错误代表不可恢复的问题并且必须捕获处理. 2.[处理异常的三种方法]:①根本不处理异常②当异常发生时处理异常③在程序的某个位置集中处理异常. 3.[未捕获的异常]:如果程序中不处理异常,则程序将非正常的终止运行,并产生关于描述在何处发生什么异常的信息

20172326 《程序设计与数据结构》第九周学习总结

学号 20172326 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常(exception):定义非正常情况下或错误的情况的对象,由程序或运行时环境抛出,可根据需要进行相应的捕获处理. 异常与错误的区别:错误代表不可恢复的问题并且必须捕获处理.而异常可以忽视,或者使用try语句处理,或调用更高级的方法. 可检测异常与不可检测异常:可检测异常必须由方法捕获,或者必须在可能抛出或传递异常方法的throws子句中列出来.在方法定义的声明头中追加一条throws子句.不可检测异常不需要使

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

20172322 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常 学会了使用try-catch来实现未捕获的异常的处理.可以使得异常被捕获进而不导致程序出现错误退出.使用try写入可能产生异常的语句,使用catch来编写在捕获异常后继续执行的代码(可以为空). "未捕获的异常"指在编译过程中不会被编译软件显示异常但是在运行时会出现异常导致程序直接退出,例如:"ArithmeticException"."In

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

20172311 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本周对异常和递归进行了学习 异常的处理方式有两种:一种是直接抛出,并从异常处终止程序:另一种是捕获并处理异常,从而使程序继续运行. 捕获和处理异常主要运用try-catch语句. 通过继承Exception类可以自定义一个新的异常 处理IO异常的常用方法是抛出异常. 对于某些问题,递归是最精炼和适当的解法,但对于其他问题,递归则不如迭代方法直接. 教材学习中的问题和解决过程 问题:什么是IO操作

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

20172327 2018-2019-1 <程序设计与数据结构>第九周学习总结 教材学习内容总结 第十五章 图 无向图 1.图的概念(非线性结构):允许树中每个结点与多个结点相连,不分父子结点. 2.图由顶点和边组成. 顶点由名字或标号来表示,如:A.B.C.D: 边由连接的定点对来表示,如:(A,B),(C,D),表示两顶点之间有一条边. 3.无向图:顶点之间无序连接. 如:边(A,B)意味着A与B之间的连接是双向的,与(B,A)的含义一样. 4.邻接(邻居):两个顶点之间有边连接. 5.自

《程序设计与数据结构》第九周学习总结

学号 20172326 <程序设计与数据结构>第九周学习总结 教材学习内容总结 图:图(Graph)是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的.与树的区别在于树中的一个结点只有一个前驱,也就是说只有一个父结点.但图中的顶点(结点)是没有这种限制关系的. 无向图:边为无需结点对的图.也就是说,现有两个顶点A.B.(A,B)与(B,A)效果相同.当两个顶点之间有边连接,也就是说这两个顶点是邻接的,也称作邻居.一个顶点