20182334 2019-2020-1 《数据结构与面向对象程序设计》第二、三周学习总结
教材学习内容总结
第二章
在整个第二章的学习中,于上学期学的C语言大相径庭,差别不大,所以用C语言的逻辑来理解Java,同样也可以理解的通,这一章来说,相对容易。
- 学习了Java简单的输入输出、自增自减、数据转换等基本内容。
- 接触关于 类 这一定义并上机实践进行运用,例如Scanner。
- 通过学习数据转换,明白所谓加宽转换是最安全的,通常不会丢失任何信息,所谓缩窄转换可能既丢失数量级也丢失精度。
第三章
在整个第三章的学习过程中,难度慢慢的上来了,但还是同C语言的逻辑。本章开始涉及到类的很多方面,例如String、Math、NumberFormat、DecimalFormat等,每种类有其自身的特点,无论哪种类都能感觉到Java的神奇,无论哪种都有各自的作用。
- 学习创建类和对象,例如很重要的String类,在类中的各种命令,例如大小写的更换,字符串的连接,取规定区间内的字符等等。
- 了解import声明,使用完全限定的引用。
- 学习Random类,如何构造随机数,学习在不同的区间内构造类型不同的随机数。
- 认识Math类,Math类的所有方法都是静态的,在用到数学公式或者数学方法时,需要Math.* 来继续编程。
- 格式化输出:有两种格式化输出,一种是NumberFormat类,一种是DecimalFormat类,前者可以利用一些命令将数字转化为百分比或者转化为美元表示,具体问题具体分析。后者是保留三位小数(0.###),通过DecimalFormat类格式化后可以将多余的小数省去,更加简洁明了。
教材学习中的问题和解决过程
- 问题1:不明白为什么输出的时候必须要scan.nextInt或者scan.nextDouble 。
- 问题1解决方案:上网搜索查到scan仅仅是个标签,在我理解来说scan是调用的意思,因为每次用到类时,总会在前面定义个
Scanner scan = new Scanner(System.in)
之后每次输出会用到scan,这个scan就是从这里调出来,然后发挥作用。
- 问题2:不明白nextInt或者nextDouble 后面的单词首字母为啥会大写。
- 问题2解决方案:同样查阅资料和浏览其他人的博客,得到的回答是:为了区分next和int或者double,有利于阅读。
- 问题3:不知道在String类时如何输入字符串。
- 问题3解决方案:询问结对伙伴,其解决办法是:scan.nextLine ,这里出现了新的单词,也被赋予了新的意义,nextLine是输入String类时必备的,也算是规定。
问题4:在random类里,前面的定义是:
Random aaa = new Random();
在生成随机数所需要的代码是:
num = aaa.nextInt();
这里有两种方式,一种是在括号里写数字,一种是在括号外乘数字,分不清两者有什么区别。
问题4解决方案:在看 此(https://www.cnblogs.com/xiehang/p/9822060.html
) 的博客后,明白一种是用math类的随机数,一种是直接的随机数。
- 问题5:在使用格式化时,DecimalFormat类为什么必须是(0.###)?
问题5解决方案:在自己上机实验后发现,###只是表示保留三位,当我只输入一个#时,发现结果只保留一位小数了,瞬间解决了自己的问题。
- 问题6:在String类这块,concat是用来连接字符串的,但我不明白concat是否只能像书上写的那样连接必须打出来的字符串,不知道能不能连接一个定义出来的字符串,通过变量连接起来。
代码调试中的问题和解决过程
问题1解决方案:后来多次编译不成,仔细翻课本,发现是文件名的问题,不能用.,立马纠正
代码托管
上周考试错题总结
- 错题1: Which properties are true of String objects?
- A .Their lengths never change
- B .The shortest string has zero length
- C .Individual characters within a String may be changed using the replace method
- D .The index of the first character in a string is one
- E .Only A and B are true
- 原因:有一部分原因是因为自己英语太差,看不懂题,从题上来说,一旦创建了字符串,字符串的长度是不会变的,最短的字符串是没有字符,所以长度为0,所以答案选E。
- 错题2:The names of the wrapper classes are just the names of the primitive data types, but with an initial capital letter.
- 原因:对于大多数包装器类都是正确的,但是对于int (Integer)和char (Character)则是错误的。
- 错题3:All the methods in the Math class are declared to be static.
- 原因:所有通过数学方法的都是静态。
- 错题4:These two ways of setting up a String yield identical results:
a) String string = new String("123.45");
b) String string = "" + 123.45;
- 原因:当用于将字符串与数字组合时,Java理解+运算符,这意味着应该将数字转换为数字字符串,然后进行连接。所以是正确的。
- 错题5:Consider the following enumeration
enum Speed { FAST, MEDIUM, SLOW };
A .The ordinal value of MEDIUM is 2
B .The ordinal value of SLOW is 1
C .The name of the Speed enumeration whose ordinal value is zero is FAST
D .The name of the Speed enumeration whose ordinal value is one is SLOW
E .None of the above
- 原因:枚举的序数值从0开始,按从左到右升序排列。所以,Speed.FAST。序数()是零,速度,中等。序数()是1,并且是Speed.SLOW。序数()是2。
- 错题6:An API is
A .an Abstract Programming Interface
B .an Application Programmer's Interface
C .an Application Programming Interface
D .an Abstract Programmer's Interface
E .an Absolute Programming Interface
- 原因:Application Programming Interface
- 错题7:Of the following types, which one cannot store a numeric value? (在下列数据类型中,哪一个不能存储一个数值型数据?)
A .int
B .byte
C .float
D .char
E .all of these can store numeric values(以上所有类型都可以存储数值型数据)
- 原因:int和byte用于存储整数,float用于存储实数或浮点值(带小数点的值)。char存储单个字符,包括字母、标点符号和数字。然而,存储数字“5”不同于存储数字5。
- 错题8:Given the following assignment statement, which of the following answers is true regarding the order that the operators will be applied based on operator precedence?
a = (b + c) * d / e - f; (下面给定的赋值语句中,基于运算符优先级,对于将被执行操作的顺序,哪一个答案是正确的?)
A ., /, +, -
B ., +, /, -
C .+, , /, -
D .+, /, , -
E .+, -, *, /
- 原因:优先顺序是()中的任何运算符,然后是和/(从左到右),然后是+和-(从左到右)。因此,+是第一个,因为它在()中,然后是,然后是/因为在/的左边,最后是-。和/具有相同的优先级,但从左到右求值。+和-也是一样的。
结对及互评
结对照片 :
点评过的同学博客和代码
- 本周结对学习情况
- 上周博客互评情况
20182321
其他(感悟、思考等,可选)
这一周以来,收获颇多,能深刻体会到敲代码的不易,不论是书上的例题,还是课后的练习题,又或是程序练习,每当我敲完一个程序,都能感到进步了一点点。举个例子,书上关于String类和格式化方面的代码,我敲完之后,亲自检查了一遍,再观察运行结果,通过C语言的逻辑,慢慢发现原来自己的盲区开始越来越少,所以还是得多上机练习。又过了一周,这一周自己很忙碌,上一周给自己规划的任务,没有全部执行,很多东西还是一拖再拖,代码也是能敲多少就敲多少,并不很上心,下一周一定先把Java放到第一步,再做别的事。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 212/212 | 2/2 | 17/17 | |
第二周 | 132/344 | 2/4 | 17/34 | |
第三周 | 689/1033 | 1/5 | 23/67 |
计划学习时间:20小时
实际学习时间:23小时
改进情况:比上周要多学了6个小时,敲代码慢慢顺手起来了,也感到慢慢开始难了。