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

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

教材学习内容总结

  • 了解逻辑以及条件符号的意义
  • if-else语句用法以及在嵌套语句的缩进意义
  • 浮点数是指二进制近似表示小数,所以比较大小时注意精度问题
  • 字符以及字符串比较时,是比较地址还是通过Unicode码来进行比较的区别。
  • while语句应当注意的问题,防止出现无限循环或循环出错。
  • switch语句中break语句的执行的意义
  • 条件运算符与条件语句的区别;其可读性劣于语句
  • do语句至少执行一次
  • for语句()中三个条件分别代表的三部分,变量的初始化,条件的判断(执行前计算),变量的增量计算

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

  • 问题1:字符串比较时,compareTo方法与其他问题中的比较
  • 问题1解决方案:compareTo方法是Comparable的方法。上周学习过程中还是理解的还是不够透彻。这次,在书上的举例中发现了compareTo方法的举例,其中有,
int result = name1.compareTo(name2);

1333460-20180410141701619-805114822.png
1333460-20180410141712410-818760207.png

直接将compareTo方法进行调用。但是,在第七章的PP7.4中,是将其首先在类中实现接口,再将其进行具体编译,指明不同条件下的输出结果。

如图:
1333460-20180410141744872-546165381.png
1333460-20180410141754755-1926004596.png

但是,为什么在书中例题可以直接实现其调用呢,在jdk中进行查找,可以看到种类众多的不同数据类型的compareTo方法,1333460-20180410141818850-768334861.png
且都在lang或Math下,这就意味着在这些类下,compareTo方法是直接可以调用的。其根本原因是因为它们都实现了接口comparable接口,并且实现了接口中的compareTo方法。所以,在自己编写类时,和其他类不同,并未事先实现,所以自然要自己实现接口。而compareTo的核心在于比较,而且其输出的int值更是可以进行自行规定。而这又要反过来运用if-else语句进行规定.同时括号内的参数也决定了它的比较对象。

  • 问题2:break语句对switch语句的影响
  • 问题2解决方案:
  • 在对书上6.1的例题的练习中,因为疏忽,只在最后一行输入了break,其结果,导致所有的case语句输出。换言之,在没有break的情况下,switch语句 一旦找到匹配的case分支(表达式的值与case后的值相等),程序开始执行这个case执行体,不在判断与后面case、default标签的条件是否匹配,除非遇到break才结束该执行体。也就是说,一旦遇到满足条件的case,且没有break的情况下,后续的case不再得到判断,而是直接变为执行体。所以说,对于switch语句,break不可或缺。同理还有default,使得在没有满足条件的情况下,依然有结果可以输出。
    1333460-20180410142229707-303965750.png

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

  • 问题1:首先是上周的代码脚本检测时报错的问题。1333460-20180410141905551-1374785274.png

  • 问题1解决方案:在老师的指导下,首先逐行运行命令,在运行这行命令时出现问题。
find . -name "*.java"| xargs cat | grep -v ^$ | wc -l

这种问题需要逐个文件进行排查,经过查找,发现了一个问题文件,看到后我就想起了过程,当时需要将几个文件移动并修改名称,再次过程中将.class错误的命名为了.java。将文件删除后,一切恢复正常。

  • 问题2:PP5.1的编写
  • 问题2解决方案:编写完成后,无法执行语句,最后发现时while语句后多了一个分号,导致编译错误,但当时并未学习到do语句,所以在怀疑为什么不提示报错。当看到do-while时,发现,while语句后可以跟分号,但会产生不同的结果。1333460-20180410141954518-282706229.png

  • 问题3:PP5.3的编写
  • 解决方案:最后发现在读取字符串的长度时,将索引值与长度搞混,导致程序无法读取到数据,导致出错。索引值是由0开始的,而长度则是由1开始,所以不可搞混。
    1333460-20180410142029586-1615766750.png

  • 问题4 : PP5.7的编写1333460-20180410142141809-639070863.png

  • 在有多个if和else时,出现了问题,例如
if ()
{}
else
{}
else{}

在这种情况下,会提示有else无if,也就是说if语句下若有多个语句需要继续判断时,(一个else不足以解决时)需要“else if”来执行。

代码托管

1333460-20180410142331319-2047323303.png

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

上周考试错题总结

  • 错题1

    The relationship between a class and an object is best described as

  • 原因,理解情况:
  • 类是方法,所以是抽象的,所以对象是在实例化后执行类方法的具体表现

  • 错题2

    In order to preserve encapsulation of an object, we would do all of the following except for which one?

  • 原因,理解情况:
  • 可以允许或不允许访问来保证其封装。但是final只是用来定义变量,与封装无关。
  • 错题3

    What happens if you declare a class constructor to have a void return type?

A.You'll likely receive a syntax error

B.The program will compile with a warning, but you'll get a runtime error

C.There's nothing wrong with declaring a constructor to be void

D.The class' default constructor will be used instead of the one you're declaring
E.None of the above

  • 原因,理解情况:
  • A不会出现错误,将变为普通方法,即不再是构造函数B系统将使用默认构造函数C不会出现错误,除非有自己的编写错误,不再是构造函数。理解:构造函数不能有返回值类型,;类将会使用默认构造函数。
  • 错题4

    During program development, software requirements specify--what the task is that the program must perform

  • 原因,理解情况:
  • 软件需求指定了程序必须完成的功能,指明了程序应当执行的任务,而不是描述如何执行所规定的任务
  • 错题5

    Static methods cannot--reference non-static instance data

  • 原因,理解情况:
  • 未理解引用(reference)和调用(invoke),引用主要指地址的引用,调用则是指方法的调用
  • 错题6

    In a UML diagram for a class

  • 原因,理解情况:
  • UML类图包括类名,属性(数据),操作(方法),以及箭头
  • 错题7

    All Java classes must contain a main method which is the first method executed when the Java class is called upon.

  • 原因,理解情况:
  • 只有驱动程序需要一个主方法,而对于类,第一个为构造函数,其他的叫做方法
  • 错题8

    Java methods can return more than one item if they are modified with the reserved word continue, as in public continue int foo( ) { ... }

  • 原因,理解情况
  • 无论一个方法中有几个变量,其返回值只能有一个
  • 错题9

    A method defined in a class can access the class' instance data without needing to pass them as parameters or declare them as local variables.

  • 原因,理解情况:
  • 实例数据是公开的,任何方法均可访问它
  • 错题10

    Every class definition must include a constructor.

  • 原因,理解情况:
  • 构造函数可以没有,因为系统会自动构造一个默认的构造函数
  • 错题11

    In order to create a constant, you would use which of the following Java reserved words?

  • 原因,理解情况:
  • final 保留符用来创建常量
  • 错题12

    An object that refers to part of itself within its own methods can use which of the following reserved words to denote this relationship?

  • 原因,理解情况:
  • 如果出现两个变量同名,可以使用this来进行区分,来定义局部变量
  • 错题13

    An object that refers to part of itself within its own methods can use which of the following reserved words to denote this relationship?

  • 原因,理解情况:
  • 上面的问题也已提到,为了实现比较,需要实现compareTo方法

单词总结:

encapsulation(封装) syntax error(语法错误)
compile(编译) invoke(调用) instance(实例的)
denote(指示)

其他

  • 本周难度较上周较为减轻,但是循环语句的逻辑性较强,需要仔细思考,同时,在循环嵌套时,格式一定要规范,否则一旦出现问题,就会极难的排查。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周110/2001/120/20
第二周425/5002/218/38
第三周900/10004/422/60
第四周1500/13005/530/90
第五周2715/30006/620/110

参考资料

String类中的compareTo方法总结
解读switch语句中的break

转载于:https://www.cnblogs.com/326477465-a/p/8778724.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值