20172305 《程序设计与数据结构》第四周学习总结
20172305 2017-2018-2 《程序设计与数据结构》第四周学习总结
教材学习内容总结
本周内容主要为书的4.1-4.5以及7.1-9的内容:
-
第四章
1.编写类与方法(构造方法的结构和用途) 2.实际参数与形式参数、public与private、return与void的区别与含义 3.UML类图的含义与形式
-
第七章
1.静态类(Math类)静态变量、静态方法 2.类间关系(依赖关系、聚合关系、继承关系) 3.接口的使用,能够在某个类中实现接口的方法(Comparable、Iterator) 4.软件活动开发、方法设计、方法重载、测试(黑盒测试、白盒测试) 5.GUI设计
教材学习中的问题和解决过程
-
问题1:构造方法
-
问题1解决方案:通过百度和老师的讲解,有了一定的认识,构造方法主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。构造方法的名字必须与定义它的类名完全相同,没有返回类型,甚至连void也没有。
-
问题2: return与void的关系
-
问题2解决方案:通过书上的理解以及自己的操练,每一个方法中可以有多个return,但并不是返回的多次,而是在不同情况下进行的返回。同时,在构造方法中没有返回值。
不返回值的方法通常不包含return语句,当 该方法执行结束时将自动返回调用方法。
- 问题3:形式参数与实际参数
- 问题3的解决办法:两者是在调用的时候进行结合的,通常实参会将取值传递给形参,形参去之后进行函数过程运算,然后可能将某些值经过参数或函数符号返回给调用者。通过理解,参数就如同以前的sinx中x,而实际参数是形式参数的实例化,实际参数所代表的值给个形式参数,进行方法运算。
方法声明首部中的参数名,被称为形式参数。
在一次方法的调用中实际传递给方法的参数,被称为实际参数。
-
问题4: 接口问题
-
问题4的解决办法:练习接口的问题,并把接口的练习于PP7.4,代码的问题在代码问题部分说明,对于接口,是一组常量和抽象方法的集合,接口中没有实现的方法,参数列表的方法声明头后面仅跟着分号。接口不能被实例化,接口的应用,大大提高了方法步骤的灵活性,通过implements实现某个接口。
-
问题5: 静态类成员
-
问题5的解决方法:静态类仅包含静态成员,不能被实例化,静态变量可以由所有的类实例共享,静态方法可以通过类名称调用。静态类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。
代码调试中的问题和解决过程
- 问题1:含布尔型的方法的运用
- 问题1解决方案:布尔型的运用自己练得很少,所以对Car类的编写一直止步于布尔型的应用,纠结半天,就是不会弄,巧妇难为无米之炊,看了好几遍的数就是不会弄,通过借鉴别人的代码,理解了并与if语句联合使用解决问题了。
-
问题2:set与get两者的运用
-
问题2解决方案:set与get的理解,刚开始只保持在书上内容,一个是修改,一个是访问,通过实验发现,这部分内容与返回值的问题有联系,对于set只是改变值,无返回值。而且,get是访问,可以调用其数值或是字符串什么的,set没有此作用。
-
问题3:构造方法中的实际参数问题
-
问题3解决方案:实际参数是字符串的时候,要加“”,我没加“”导致了问题提醒,很神奇以为又出现bug了,结果对比了例题才发现自己没加“”造成的,犯了这么低级的错误,还没有即使发现,困扰了半天才解决,还是要归结为自己的马虎造成的。
-
问题4:PP4.6的问题
-
问题4解决方案:题目中要求判断盒子是否装满的问题,我一直没有找到很简单的方案,仅仅通过增加一个货物的实际高度,与盒子高度做比较,才能判断。而且这样就有可能货物比盒子要高的可能性,这种也要算装满么?而且感觉自己的布尔型的用法好像与题意有些不符,结果是做出来了,但是有很大的修改地方,值得我不断的进行修改。
-
问题5:接口的问题与PP7.4
-
问题5的解决方案:在RationalNumber类中实现Comparable接口,我认为得像PP7.8一样去弄,编写一个接口类,结果就开始纠结比较之后输出的问题,我是在接口类中简单定义一些,还是整体移到RationalNumber类中进行编译,还有我想到这个输出的应该是什么,是要告诉用户这是两个有理数是近似相等,还是不想等的,
感觉自己是一个问题男孩所以带着这一堆问题跑去问学长,通过两个多小时的交流,我发现这个类不用编写,Compararle类的comparaTo是在类库中就有的,而且就和之前书上介绍String类的comparaTo一样,进行同类型的比较,而且输出的是正整数、负整数和零,根据其输出的数值和其正负来判断出来,不用输出一串什么字符串之类的问题。而且,看到学长帮助的修改下,我发现学长在前面接口出加了,问学长学长说到以后会学,故意卖个关子,故弄玄虚,结果我没查到这是什么......(果然大佬就是大佬,强大到轻轻松松的解决了我所有的问题,在此表示感谢!)
代码托管
上周考试错题总结
-
错题1 What happens if you attempt to use a variable before it has been initialized?(如果在初始化之前尝试使用变量,会发生什么情况?) A syntax error may be generated by the compiler (语法错误可以由编译器生成。)
A runtime error may occur during execution(执行期间可能出现运行时错误。) -
错误解析: 很多时候,编译器能够检测到未初始化变量的尝试使用,在这种情况下会产生语法错误。如果在编译器中使用脱逃检测,那么在使用时就会出现运行时错误。Java是一种非常“安全”的语言,因此如果在计算中使用未初始化的变量,它不允许使用“垃圾”或“0”。本题所说的内容自己也没有去试过,只能凭自己学过的内容进行判断。而且,我认为只有语法错误,不会产生运行错误的。
-
错题2 What is the function of the dot operator?(点算符的函数是什么?)
It allows one to access the data within an object when given a reference to the object(它允许在给定对象的引用时访问对象中的数据。
)It allows one to invoke a method within an object when given a reference to the object(当给定对象的引用时,它允许在对象中调用方法。) -
错误解析: 点运算符在对象引用之后直接追加,然后是需要访问的数据或方法。在数据的情况下,访问可能是用于读取或写入。在方法的情况下,访问是允许一个调用方法。浮点数内的点是一个小数点,而不是点算符。所以,一个点的含义无非就是引用数据或是调用方法。本题没有全面的考虑点运算符的作用,而且由于E选项的迷惑,不太敢选择引发的错误。
-
错题3 In the StringMutation program shown in Listing 3.1, if phrase is initialized to "Einstein" what will Mutation #3 yield if Mutation #1: mutation1 = phrase.concat(".")?(在清单3.1中所示的string突变程序中,如果短语被初始化为“Einstein”,那么如果突变#1:mutation1 = phrase.concat(“。”)mutation3会发生什么突变呢?)XINSTXIN.
-
错误解析: 本题最不应该错,看到是和书上的例题有关,加上用有道词典的翻译,结果有道就翻译错了,译文中根本没有mutation3的变化,我也是醉了。
-
错题4 Consider the following two lines of code. What can you say about s1 and s2?
String s1 = "testing" + "123";
String s2 = new String("testing 123");(考虑以下两行代码。关于s1和s2,你能说些什么?字符串s1 = "test" + "123";字符串s2 = new String(“test123”);)s1 and s2 are both references to different String objects(s1和s2都是对不同字符串对象的引用。) -
错误解析: 没有看到中间的空格,误以为两者是一样的,所以选错。下次定要仔仔细细的看题目。
-
错题5 An "alias" is when(一个是当“别名”
)two different reference variables refer to the same physical object(两个不同的引用变量引用同一个物理对象。) -
错题解析: 当对同一物理对象有两个或多个引用时,就会出现一个“别名”,以便通过引用,可以读/写/修改对象。只局限于数字的问题,忽略了其他物理对象,例如字符串了什么的,都可以。
-
错题6 The advantages of the DecimalFormat class compared with the NumberFormat class include(与NumberFormat类相比,DecimalFormat类的优点包括。)precise control over the number of digits to be displayed(精确控制显示的数字的数目。) control over the presence of a leading zero
(控制一个前导零的存在。) -
错题解析: 虽然DecimalFormat比NumberFormat提供了更多的控制,但是通过一个或多个数学方法将截断保留在程序员手中。%符号将出现在显示的末尾而不是开始。前导零的应用,是自己没有尝试的结果,根据书中的例子,自己只是尝试在尾部放零,忽略了前导的问题。通过老师的考后的讲解,对此有了更深的认识与来理解。
-
错题7 These two ways of setting up a String yield identical results:a) String string = new String("123.45");b) String string = "" + 123.45;(两种设置字符串的方式产生了相同的结果)
true -
错题解析: Java理解+运算符,当使用数字组合字符串时,应该将数字转换为数字字符串,然后再进行连接。还是自己对+的理解不够到位导致的错误,会好好看书的。
-
本周的答题考的分数较高,但在答题过程中并没有感觉每道题都会做,甚至还存在有些题是“凭感觉”选上的,感觉自己愧对这个成绩,很多题不是不确定,就是不知道,其实很多题无非都是书上的细节部分,或是书上内容的延伸,加之自己这个坏毛病——马虎,导致的对题理解可以,却看错了题白瞎了分,蓝瘦香菇,而且感觉学习难度不断加深,往后更要把时间分配好,好好学JAVA。
感悟
一周半的学习,第四章和第七章,感觉有好多代码要敲,有好多知识要学,感觉自己一下回到了高三的感觉,知识一点点的加深,至于书上的内容是远远不够日常的应用的,感觉自己要是离开书敲个类,估计一半都不会,而且有些知识点特别专业化,难理解,不明白。压力山大。听过学长学姐说,常常敲代码到很晚很晚,也就可以理解这门科目,要下很大很大的功夫,才能有所成就。慢慢坚持吧,看到自己的代码量不断的突破,还是有那么一点点的欣慰的。对于这两章的内容,还有很多没有掌握,还有练习没有敲完,会在往后的日子漫漫的补上的。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 136/136 | 1/2 | 15/20 | |
第二周 | 570/706 | 1/4 | 20/38 | |
第三周 | 613/1319 | 1/7 | 23/60 | |
第四周 | 1249/2568 | 1/9 | 30/90 |