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

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

教材学习内容总结

  • 1.条件判断
    a.if语句: 如果条件表达式的运算结果是true,则执行if中的语句,然后执行if后面的语句
    b.if-else语句:如果条件成立执行第一条语句,不成立则执行else语句。
    c.switch语句:先计算表达式,与几个可能的case子句取值进行匹配,控制会跳转到第一条匹配的case子句执行。无匹配则执行default。

  • 2.循环
    a.while:先执行表达式计算,循环体执行完后再次计算表达式,直到为false,退出循环。接着执行循环体后的语句。
    b.do:将循环条件放到循环体的尾部,使先运行循环体,再对控制条件进行计算,以确保do循环体至少会执行一次
    c.for:适用于循环执行前已经确切知道具体的循环次数(循环头内声明的变量在循环体外部不能用)

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

  • 问题1:如果两个字符串,长度不同,多个对应位置索引处的字符不同,compareTo如何比较?

  • 问题1解决过程:字符和字符串的比较以Unicode字符集为基础。这种比较称为字典顺序比较。而其只比较第一个字符,如果不同则其后不再比较。

  • 问题2:for循环的方式好像与其他循环语句有些不同之处

  • 问题2解决过程:首先是for循环特别适用于执行前已经确切知道具体循环次数的情况。
    形式上的不同:for语句有个控制头,分为三部分。执行初始化的第一部分只执行一次:这里有个需要注意的地方,就是控制头里声明的变量在循环体外不能被使用也不能被修改。
    然后执行循环体前要先计算布尔表达式,结果为true之后执行循环体。最后才执行第三部分的增量。如果布尔表达式结果为false,则不执行循环体,也不执行增量增加。for循环的控制头的形式很容易让人觉得它是判断后就执行第三部分增量增加,再执行循环体

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

  • 问题1:这个编程项目要求输入一个任意长度的整型数值,然后分别输出其中的奇数,偶数,零的个数。编译的时候出现如图错误:

  • 问题1解决过程:错误的大概意思是说什么超出了边界,结合出错的位置,发现了原因:while的条件判断出现了问题,第一次都无法执行,也就是循环体一次也执行不了。这也体现了do语句的特点:循环体至少执行一次。修改了条件判断之后,就正常运行了。
    另外要记录的是:一开始受书上例题判断一个字符串是否为回文的影响,先入为主,也从用户输入的数值左右同时判断,但产生了一个问题就是:如果你输入的是有奇数个数字的数值,会有中间的那个数字无法被判断。后来发现完全没必要,从左边一个数字一个数字地判断就都能保证都能够被判断,直到最后一个数字结束循环。
    我用的是判断拿出来的字符是不是2、4、6、8、0中的一个,就可以了,用上逻辑或的话,代码也不是很长。当然用取余等其他方法也能简单的做出来。

  • 问题2:一个编程项目要求输出12x12的乘法口诀表,第一次做出来的运行结果如图:

  • 问题2解决过程:从这个程序的编写过程发现了很多问题和收获:
    1.截图的最上方出现的就是一个无限循环,这也是编写修改的过程中出现的一个错误,对于条件判断语句的界限设置很模糊,一不小心就会造成循环体执行一次或者就是无限循环,要不就是不执行。所以我认为,条件和循环语句的最重要的部分就是条件表达式的书写,也是一个比较难的东西(对于我自己来说)
    2.下面的情况就是:修改了一下判断语句,最后结果就只输出了12x12乘法表的第一列,很明显这是循环体里出现的问题。部分代码如下:

    上图中的是最后的正确代码。
    首先,这是参考了书上输出星星的那个例题,如果是要我直接去编写这个程序,很难相信我能像乘法表那样输出出来。
    再有就是,这个程序如果在一开始学Java时也能做出来,直接算出来,然后用输出语句输出出来就行了。但是,这里很显然要用循环语句输出。从代码行也能看出来16行就解决了问题。而且只要修改了行数,几乘几的乘法表都能够阶梯状地输出出来。甚至用上Scanner类,可以与用户交互。
    一开始做了很多修改,主要是不清楚这个循环的结构,后来试了几次,再结合书上的例题。先搞清楚这个循环结构的原理:第一个for循环是限制了要计算的乘法口诀的行数;内嵌的for循环:百度了一张九x九乘法表,发现主要想操作的就是“x”左右的操作数,第二个数就是行数,不用再另外声明变量。第一个操作数在每一行都呈现出规律,从左向右从1依次增加到行数。然后跳出循环。这个时候想要另起一行输出,只要在内嵌循环的外面加一条可以换行的空白输出语句println,但是他还是要在最外边的循环里边,因为每一次输出完一行都得换行。最后达到要输出的行数,于是跳出循环,结束。
    如图是输出的运行效果:

  • 问题3:一个编程项目要求输入一个年份,根据条件判断其是否为闰年,如图是我第一次写的代码:

    这个代码是能够运行的。但存在的问题是它无法按照条件语句准确地判断一个数是否为闰年,输出的结果总是“不是闰年”。按照我本来的判断方法,思路是:如果一个数不能被4整除,那它必然会有小数,而我只要判断这个数字和这个数字除以4再取整乘4的结果比较就行了。如果整除,两数一定相等。从而产生两个结果,达到判断目的。但是很显然,这个代码很难看,很多,并且输出的结果没有达到预期。

  • 问题3解决过程:首先分析了一下这种判断方法,理论上是可以的。一开始考虑到的是算数运算符与取整的先后级问题,所以加了很多括号。但结果依然不行,条件的嵌套也是没问题的。最后想到的原因可能是整数的除法之后取整与原数的比较存在问题。书上说过浮点数的比较是要计算差的绝对值与误差标准比较的。
    其实解决这个问题的编程方式有很多,只要能达到区分的目的就行了。也借鉴了其他同学的方法---“取余”。这个计算就非常简单了,代码也很清晰。
    这也为我提供了一个思路: 有的时候,一种方法产生的错误如果始终找不到修正的方法,换个方法思路也许会更容易更简单地去解决问题。

代码托管

上周考试错题总结

  • 错题1:

  • 错题1分析:保留字“new”用于实例化一个对象,即创建类的实例。语句new后面跟着类名。这调用类的构造函数。

  • 错题2:

  • 错题2分析:封装意味着类包含操作数据所需的数据和方法。为了正确地保存封装,实例数据不应该从类外部直接访问,所以实例数据是私有的,方法被定义为访问和操作实例数据。此外,访问和操作实例数据的方法被公开,以便其他类可以使用该对象。

  • 错题3:

  • 错题3分析:所有的方法都隐含返回某个东西,因此必须有一个返回语句。但是,如果程序员希望编写一个不返回任何内容的方法,因此不需要返回语句,那么它就必须是void方法

  • 错题4:

  • 错题4分析:一旦方法终止,用调用该方法的方法控制简历。在这种情况下,m2调用m4,因此当m4终止时,m2恢复。

  • 错题5:

  • 错题5分析:实例数据是组成类的实体,可能是任何类型的实体,无论是原始的还是对象的,并且可能是公共的或私有的。通过使用对象作为实例数据,它允许在其他类上构建类。类具有其他类的实例数据的关系称为has-a关系。

  • 错题6:

  • 错题6分析:它是一个语法违例,声明任何类型的构造函数都是无效的,因此会收到一个语法错误。

  • 错题7:

  • 错题7分析:只有驱动程序需要一个主方法。驱动程序是第一个在任何Java程序中执行的程序(除了applet),但是它可以根据需要调用其他类,而这些其他类不需要主要方法。

  • 错题8:

  • 错题8分析:所有的Java方法都返回一个单独的项,不管它是一个原始数据类型的对象,还是void。保留字continue用于退出循环的其余部分并再次测试该条件。

  • 错题9:

错题9分析:静态方法是类本身的一部分,而不是实例化的对象,因此静态方法在类的所有实例化对象中共享。
由于静态方法是共享的,因此不能访问非静态实例数据,因为所有非静态实例数据都是特定于实例化对象的。静态方法可以访问静态实例数据,因为与方法一样,实例数据在类的所有对象中共享。静态方法也可以访问传递给它的参数。

  • 错题10:

  • 错题10分析:测试是必需的,因为所有的软件都会有错误。复杂系统在发布之前尤其需要测试。所寻找的错误类型是逻辑错误和运行时错误。在实现过程中,所有语法错误都将被识别和修复。

  • 错题11:

  • 错题11分析:任何类都可以扩展,无论是接口、实现接口,还是两者都没有。唯一的例外是,如果类被显式地修改为“final”,在这种情况下它不能被扩展。

  • 错题12:

  • 错题12分析:在黑盒测试中,测试人员不应该知道软件是如何实现的。本质上,软件是一个黑盒,它有输入和输出,程序的机制是不透明的。如果测试人员确实了解程序是如何工作的,那么测试人员的测试用例可能会有偏差。如果测试人员知道程序是如何工作的,那么测试就称为“玻璃盒测试”。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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 52/90
第五周 631/1914 1/6 82/120

参考资料

posted @ 2018-04-10 21:52  20172308周亚杰  阅读(301)  评论(4编辑  收藏  举报