20182334 2019-2020-1 《数据结构与面向对象程序设计》第二、三周学习总结

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是否只能像书上写的那样连接必须打出来的字符串,不知道能不能连接一个定义出来的字符串,通过变量连接起来。

  • 问题6解决方案:在参考了结对伙伴的代码后,我发现自己的问题出在了char这里,然后立刻改正:


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

  • 问题1:在class后面的文件名那里,仍然会存在P3.2类似的点

  • 问题1解决方案:后来多次编译不成,仔细翻课本,发现是文件名的问题,不能用.,立马纠正

  • 问题2:在需要用Scanner输入时,常常忘记用import声明

  • 问题2解决方案:多次编译不过,反复检查,发现import没有加,立刻加上,

代码托管

上周考试错题总结

  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。
  1. 错题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)则是错误的。
  1. 错题3:All the methods in the Math class are declared to be static.
  • 原因:所有通过数学方法的都是静态。
  1. 错题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理解+运算符,这意味着应该将数字转换为数字字符串,然后进行连接。所以是正确的。
  1. 错题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。
  1. 错题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
  1. 错题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。
  1. 错题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类的连接、在区间内取数字或字符。
      • 讨论课后题及老师布置的程序,同时讨论本周的实验内容。
      • 互相提问,排查对方不知道的知识盲区,看对方代码的错误
  • 上周博客互评情况

其他(感悟、思考等,可选)

这一周以来,收获颇多,能深刻体会到敲代码的不易,不论是书上的例题,还是课后的练习题,又或是程序练习,每当我敲完一个程序,都能感到进步了一点点。举个例子,书上关于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个小时,敲代码慢慢顺手起来了,也感到慢慢开始难了。

参考资料

原文地址:https://www.cnblogs.com/cistineup/p/11569520.html